Laravel 用枚举属性填充给出错误

Laravel fill with enum attribute gives error

我有一个像这样的枚举:

<?php

namespace App\Models\helpers\Enums;

enum ComissionamentoVendedor: string
{
    case Faturamento = 'No faturamento';
    case Pagamento = 'Após o pagamento pelo cliente';
}

我有一个使用这个枚举的模型

...
    public $casts = [
        'comissionamento_momento' => ComissionamentoVendedor::class,
    ];
...

但是当我尝试保存它时出现错误:

$vendedor = new Vendedor;
$vendedor->fill($atributos);
$vendedor->save();

错误是ErrorException: Attempt to read property "value" on string

它发生在文件上 vendor/illuminate/database/Eloquent/Concerns/HasAttributes.php:951

 protected function setEnumCastableAttribute($key, $value)
 {
     // $value here is a string, a valid value from ComissionamentoVendedor Enum, sent by the frontend but looks like Laravel expects to be an Enum
     $this->attributes[$key] = isset($value) ? $value->value : null;
 }

我是不是做错了什么?我实际上使用的是 Lumen 8.3.3。

除非您可以升级在您的应用程序中使用的 Illuminate 库,否则您将无法让演员从字符串中为您获取枚举;你将不得不通过一个枚举。您可以使用 from 方法从字符串中获取所需的枚举:

$enum = ComissionamentoVendedor::from($value);

如果您不确定此值是否实际上是 Enum 的有效值,您可以使用 tryFrom 方法:

$enum = CommissionamentoVendedor::tryFrom($value) ?? $defaultEnum;

PHP.net Manual - Language Reference - Enumerations - Backed enumerations

Github - Laravel Framework - Commit - [8.x] Enum casts accept backed values 于 2021 年 11 月 15 日提交