使用枚举列进行 Laravel 验证

Pay*_*jad 5 validation laravel laravel-5

我有这个领域:

ID,标题,类型

type 是 enum 我想通过 Type 列验证我的标题,例如:

id | title | type
1 | test | option1
2| test | option2
Run Code Online (Sandbox Code Playgroud)

因此,当有人尝试插入具有此条件的行时,应针对该列的唯一性处理验证。

3 | test | option1 ==> should not be insert due unique validation rule.
Run Code Online (Sandbox Code Playgroud)

我的验证规则会是什么样子?

问候

// 编辑 1:规则外观是解决方案。

APu*_*APu 9

in:option1,option2 验证字段必须包含在给定的值列表中。

not_in:option1,option2 验证字段不得包含在给定的值列表中。

您的验证应如下所示,但它要求您在“in”参数或“内爆”数组中硬编码您的选项。

$validator = Validator::make(Input::only(['title', 'type']), [
    'type' => 'in:option1,option2, // option1 or option2 values
    'title' => 'required|min:6|max:255', //whatever rules you want ..
]);
Run Code Online (Sandbox Code Playgroud)

您可以通过这种方式避免“内爆”:

$validator = Validator::make(Input::only(['title', 'type']), [
        'type' => Rule::in(['option1', 'option2']), // option1 or option2 values
        'title' => 'required|min:6|max:255', //whatever rules you want ..
    ]);
Run Code Online (Sandbox Code Playgroud)


saz*_*rjb 1

如果该type字段不是动态的,您可以使用Rule类在验证规则中添加额外的查询。

return [
    'title' => [
        Rule::unique('tablename', 'title')->where(function ($query) {
            $query->where('type', 'option1');
        })
    ]
];
Run Code Online (Sandbox Code Playgroud)

否则,您可以制定自定义验证规则。