GlosarioArquitectura

¿Qué es Enum?

Los Enums en Laravel aprovechan los enums nativos de PHP 8.1 con integracion en Eloquent para castear columnas de base de datos, validar inputs y definir conjuntos fijos de valores como estados, roles o tipos.

Enums en Laravel

Desde PHP 8.1 y Laravel 9, los enums nativos se integran de forma nativa con Eloquent, validacion, routing y otras partes del framework.

Definir un enum

enum PostStatus: string
{
    case Draft = 'draft';
    case Published = 'published';
    case Archived = 'archived';

    public function label(): string
    {
        return match($this) {
            self::Draft => 'Borrador',
            self::Published => 'Publicado',
            self::Archived => 'Archivado',
        };
    }

    public function color(): string
    {
        return match($this) {
            self::Draft => 'gray',
            self::Published => 'green',
            self::Archived => 'red',
        };
    }
}

Uso con Eloquent

class Post extends Model
{
    protected function casts(): array
    {
        return [
            'status' => PostStatus::class,
        ];
    }
}

// Uso
$post->status = PostStatus::Published;
$post->save();

if ($post->status === PostStatus::Draft) {
    // ...
}

// Consultas
Post::where('status', PostStatus::Published)->get();

Validacion

use Illuminate\Validation\Rules\Enum;

$request->validate([
    'status' => ['required', new Enum(PostStatus::class)],
]);

Los enums eliminan los "magic strings" del codigo, proporcionan autocompletado del IDE y hacen que los posibles valores de un campo sean explicitos y autodocumentados.