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.