【问题标题】:Does eloquent support array enum casting?eloquent 是否支持数组枚举类型转换?
【发布时间】:2021-12-27 19:00:35
【问题描述】:

Eloquent 允许Enum Casting

Eloquent 还允许您将属性值转换为 PHP 枚举。 为此,您可以指定您希望的属性和枚举 投射到模型的 $casts 属性数组中:

use App\Enums\ServerStatus;

/**
 * The attributes that should be cast.
 *
 * @var array
 */
protected $casts = [
    'status' => ServerStatus::class,
];

在模型上定义演员表后,指定的属性 当您与之交互时,将自动转换为枚举 属性:

if ($server->status == ServerStatus::provisioned) {
    $server->status = ServerStatus::ready;

    $server->save();
}

是否可以在 eloquent 中对数组值使用枚举转换?

我有一个现有的雄辩模型,过去只有一种类型。现在它需要支持多个。

Laravel 是否支持数组枚举转换或者这不可能?实现类似目标的替代方法是什么?

【问题讨论】:

  • 就像将数组的每个值转换为特定的枚举一样?
  • @Rwd 基本上是的。我想在一个类型属性上有多个值,并且很可能应该转换为数据库中枚举的逗号分隔列表。我觉得我必须自己实现。

标签: laravel eloquent php-8


【解决方案1】:

你可以使用spatie/laravel-enum

安装后:

composer require spatie/laravel-enum

您可以将它用于数组枚举转换,例如:

protected $casts = [
    'status' => StatusEnum::class.':collection',
];

如果status 可以为空,您可以:

protected $casts = [
    'status' => StatusEnum::class.':collection,nullable',
];

这个包还提供了验证规则和其他功能。

这里有一个有趣的pull request,已经合并了,但是我没有测试。

【讨论】:

    猜你喜欢
    • 2012-12-03
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 2010-10-11
    相关资源
    最近更新 更多