使用枚举列进行Laravel验证

时间:2017-04-10 08:06:09

标签: laravel validation laravel-5

我有这个字段:

  

id,title,type

类型是枚举 我想按类型列验证我的标题,例如:

id | title | type
1 | test | option1
2| test | option2

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

3 | test | option1 ==> should not be insert due unique validation rule.

我的验证规则如何?

此致

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

3 个答案:

答案 0 :(得分:4)

<强> 在:选项1,选项2 验证字段必须包含在给定的值列表中。

<强> NOT_IN:选项1,选项2 验证字段不得包含在给定的值列表中。

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

$broadcast_data['first_name'] = 'John';
$broadcast_data['last_name'] = 'Doe';
$return_socket['data'] = $broadcast_data;

Event::fire(new Message($return_socket));       //  Sending message to pusherjs via Laravel Event.

你可以通过这种方式避免'内爆':

$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 ..
]);

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

没有自定义规则。

您无法通过任何laravel原生验证规则验证两列的组合是唯一的。

但是你有两个选择:

  1. 使用自定义验证程序创建自己的规则。 Reference
  2. 使用此套餐:https://github.com/felixkiss/uniquewith-validator
  3. 当然,在您的迁移过程中,titletype的组合也是唯一的。