我有这个字段:
id,title,type
类型是枚举 我想按类型列验证我的标题,例如:
id | title | type
1 | test | option1
2| test | option2
因此,当有人试图插入具有此条件的行时,应对该列的唯一处理进行验证。
3 | test | option1 ==> should not be insert due unique validation rule.
我的验证规则如何?
此致
//编辑1: 规则外观是解决方案。
答案 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原生验证规则验证两列的组合是唯一的。
但是你有两个选择:
当然,在您的迁移过程中,title
和type
的组合也是唯一的。