1

当我尝试将模型中的属性转换为我的一个枚举时,它会引发错误:

调用未定义的方法 App\Enums\UserType::from()

我找不到有关所需find()方法的任何信息。

我按照这里的说明进行操作。

我的枚举UserType

namespace App\Enums;

enum UserType
{
    case CUSTOMER;
    case PARTNER;
    case ADMIN;
}

我的用户模型:

namespace App\Models;

use App\Enums\UserType;
use FaarenTech\LaravelCustomUuids\Interfaces\HasCustomUuidInterface;
use FaarenTech\LaravelCustomUuids\Models\UuidModel;
use Illuminate\Auth\MustVerifyEmail;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableInterface;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableInterface;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordInterface;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
use Illuminate\Auth\Authenticatable;
use Illuminate\Foundation\Auth\Access\Authorizable;
use Illuminate\Auth\Passwords\CanResetPassword;

class User extends UuidModel implements
    AuthorizableInterface,
    AuthenticatableInterface,
    CanResetPasswordInterface,
    HasCustomUuidInterface
{
    use
        HasApiTokens,
        HasFactory,
        Notifiable,
        Authenticatable,
        Authorizable,
        CanResetPassword,
        MustVerifyEmail,
        SoftDeletes;

    /**
     * The attributes that should be cast.
     *
     * @var array<string, string>
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
        'type' => UserType::class
    ];
}
4

1 回答 1

1

您需要将每个枚举映射到一个标量值(int、float、string、bool),这样 Laravel 可以从(数据库存储的)值 -> 枚举进行转换。

例如

enum UserType: string
{
    case CUSTOMER = 'CUSTOMER';
    case PARTNER = 'PARTNER';
    case ADMIN = 'ADMIN';
}

请参阅PHP 中的支持枚举:

支持的枚举实现了一个内部的 BackedEnum 接口,它公开了两个额外的方法:

from(int|string): self 将采用一个标量并返回相应的 Enum Case。如果没有找到,它会抛出一个 ValueError。这主要在输入标量受信任且缺少枚举值应被视为应用程序停止错误的情况下有用。

于 2022-02-09T22:59:08.307 回答