我的网站有多个实例(公司)。
每家公司都可以添加自己的广告资源,unit
号码在实例(公司)中必须是唯一的。但我希望每个公司允许相同的单位数。因此,unit+ instance_id
必须是唯一的。有没有办法在请求规则中实现此检查?
以下规则检查清单中是否已存在单位。我需要添加inventory.id AND inventory_instance_id
public function rules() {
return [
'unit' => 'unique:inventory|required|max:45',
'comments' => 'sometimes|max:255'
];
}
public function messages() {
return [
'unit.unique' => 'Unit number already exists!',
'unit.required' => 'Enter Unit Number!',
'max' => ':attribute - Should not be longer than 255 symbols!'
];
}
答案 0 :(得分:2)
unique
验证允许许多参数。语法大致为unique:table,column,except,idColumn,whereN,valueN
。
第一个参数是表,第二个是要唯一的字段,第三个是要忽略的id,第四个是第三个参数的id列,然后是第四个和第五个(和第六个/第七个等等... )允许您为唯一验证指定其他where子句。这就是你要找的东西。
您可以使用第四个和第五个参数指定您的单位在指定的实例ID中必须是唯一的。假设您的实例ID存储在inventory.instance_id
中,并且您在名为$instanceId
的变量中具有该字段的值,那么您的规则将类似于:
public function rules() {
$instanceId = 1;
return [
'unit' => 'unique:inventory,unit,NULL,id,instance_id,'.$instanceId.'|required|max:45',
'comments' => 'sometimes|max:255'
];
}
正如您可能已经猜到的,您现在的一个问题是您的规则是动态生成的。您需要找出一种方法,使用您要检查的实例ID来更新规则。
答案 1 :(得分:0)
检查此套餐:https://github.com/felixkiss/uniquewith-validator
我认为它解决了你的问题。