k0p*_*kus 9 laravel eloquent php-8
Eloquent 允许Enum Casting。
Eloquent 还允许您将属性值转换为 PHP 枚举。为此,您可以在模型的 $casts 属性数组中指定要转换的属性和枚举:
Run Code Online (Sandbox Code Playgroud)use App\Enums\ServerStatus; /** * The attributes that should be cast. * * @var array */ protected $casts = [ 'status' => ServerStatus::class, ];一旦在模型上定义了转换,当您与属性交互时,指定的属性将自动转换为枚举或从枚举转换:
Run Code Online (Sandbox Code Playgroud)if ($server->status == ServerStatus::provisioned) { $server->status = ServerStatus::ready; $server->save(); }
是否可以在 eloquent 中对数组值使用枚举转换?
我有一个现有的雄辩模型,用于具有一种类型。现在它需要支持多个。
Laravel 是否支持数组枚举转换或者这不可能?实现类似目标的替代方法是什么?
从 Laravel v9+ 开始,现在可以转换枚举数组。
use App\Enums\ServerStatus;
use App\Enums\ServerType;
use Illuminate\Database\Eloquent\Casts\AsEnumCollection;
use Illuminate\Database\Eloquent\Casts\AsEnumArrayObject;
/**
* The attributes that should be cast.
*
* @var array
*/
protected $casts = [
'statuses' => AsEnumCollection::class.':'.ServerStatus::class,
'types' => AsEnumArrayObject::class.':'.ServerType::class,
];
Run Code Online (Sandbox Code Playgroud)
你可以使用spatie/laravel-enum
安装后:
composer require spatie/laravel-enum
Run Code Online (Sandbox Code Playgroud)
您可以将它用于数组枚举转换,例如:
protected $casts = [
'status' => StatusEnum::class.':collection',
];
Run Code Online (Sandbox Code Playgroud)
如果status可以为空,您可以:
protected $casts = [
'status' => StatusEnum::class.':collection,nullable',
];
Run Code Online (Sandbox Code Playgroud)
该包还提供验证规则和其他功能。
这是一个有趣的拉取请求,已被合并,但我没有测试它。
| 归档时间: |
|
| 查看次数: |
4257 次 |
| 最近记录: |