当我尝试将模型中的属性转换为枚举之一时,它会抛出错误:
调用未定义的方法 App\Enums\UserType::from()
我找不到任何有关所需find()方法的信息。
我按照这里的说明进行操作。
我的枚举UserType:
namespace App\Enums;
enum UserType
{
case CUSTOMER;
case PARTNER;
case ADMIN;
}
Run Code Online (Sandbox Code Playgroud)
和我的用户模型:
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
];
}
Run Code Online (Sandbox Code Playgroud)
您需要将每个枚举映射到标量值(int,float,string,bool),这样Laravel可以从(数据库存储的)值转换为>枚举。
例如
enum UserType: string
{
case CUSTOMER = 'CUSTOMER';
case PARTNER = 'PARTNER';
case ADMIN = 'ADMIN';
}
Run Code Online (Sandbox Code Playgroud)
请参阅PHP 中支持的枚举:
支持的枚举实现了一个内部 BackedEnum 接口,该接口公开了两个附加方法:
from(int|string): self 将接受一个标量并返回相应的 Enum Case。如果没有找到,就会抛出 ValueError。这主要在输入标量受信任并且缺少枚举值应被视为应用程序停止错误的情况下有用。