我知道这个问题很老了,但是在寻找类似问题的解决方案时,我偶然发现了这个问题。不需要自定义验证代码。
我有一个分类帐代码数据库,其中“名称”和“short_name”对于每个用户(user_id)必须是唯一的。我启用了软删除,因此它们应该仅在给定用户的未删除行中是唯一的。
这是我的函数,它返回验证字符串:
protected function validation_data($user_id, $update_id = "NULL") {
return [
'name' => "required|max:255|unique:ledger_codes,name,$update_id,id,deleted_at,NULL,user_id,$user_id",
'short_name' => "max:255|min:3|unique:ledger_codes,short_name,$update_id,id,deleted_at,NULL,user_id,$user_id",
'description' => 'max:255',
];
}
对于任何想知道唯一验证程序的参数字符串语法的人,它如下所示:
- arg 0:数据库中的表名
- arg 1:值唯一的字段名称
- arg 2:要忽略的单个 ID(如果不使用它,请设置为大写 NULL。
- arg 3:单个 id 所在的字段。它默认为“id”,因此如果您不使用它,并且您有更多的参数,请使用字符串“id”。
- arg 4/5:where 子句的字段名称/值对(在我的示例中)。
where('deleted_at',null)
- arg 6/7:另一个字段名称/值对(在我的示例中)。
where('user_id', $user_id)
- arg 8/9:另一个字段名称值对
- arg 10/11: 另一个.......
...等等。
字段名称/值对中的值字段可以是要匹配的值、NULL 或NOT_NULL。