0

在 Laravel 9 和 PHP 8.1 中,我无法比较 laravel 验证规则中支持的枚举,您可以在其中使用 ->where 子句。它需要一个标量值来比较。有没有其他方法可以与枚举对象而不是标量值进行比较?

validator($attributes, [
    'manager_id' =>
        [
            'required',
            'integer',
            Rule::exists(User::getTableName(), 'id'),
            Rule::unique(JProject::getTableName(), 'manager_id')
                ->where('status', JProjectStatus::Active)
        ]
])->validate();

JProjectStatus 是一个支持的枚举

enum JProjectStatus: string
{
    case Active = 'active';
    case Inactive = 'inactive';
    case Blocked = 'blocked';
}

当我试图检查经理在项目是否处于活动状态时是唯一的时,我遇到了一个类型错误,我完全理解它正在将stringenum object进行比较。

消息“str_replace():参数 #3 ($subject) 必须是数组|字符串类型,App\Enums\JProjectStatus 给定”异常“TypeError”

但是,如果我像下面这样写,这是一个与 str_replate() 完全匹配的缩放器值。

validator($attributes, [
'manager_id' => 
[
  'required', 
  'integer', 
  Rule::exists(User::getTableName(), 'id'),
  Rule::unique(JProject::getTableName(), 'manager_id')->where('status', JProjectStatus::Active->value)
]

])->validate();

因为现在'JProjectStatus::Active->value''active'的标量值

当然,我可以在 where 条件下通过闭包,但想知道最佳实践。我的问题是,这样写可以吗,或者有没有其他方法可以用枚举对象编写最佳实践。

4

0 回答 0