内置验证器似乎无法实现,我应该如何在模型中实现此功能?
$rules = [
'user_id' => 'required|unique:service_details,user_id',
'service_id'=>'required|unique:service_details,service_id'
];
以上将防止 user_id
和 service_id
独立重复,这不是我的要求
它会拒绝
(1,2)
(1,3)
因为 1 是重复的,但它应该被接受,因为我想要复合唯一键
最佳答案
复合唯一字段验证 is provided out-of-the-box in 5.0+ .我不能代表早期版本。
您基本上可以为您的唯一验证规则何时应用指定一个 where 子句。例如
'term' => 'unique:terms,term,NULL,id,taxonomy,category'
这条规则说term
在 terms
上应该是唯一的表,但仅在 taxonomy
的位置等于“类别”。
例如,它会防止重复“新闻”类别,但我仍然可以有一个“新闻”标签。
我不知道你的模式,但在你的情况下它会是这样的:
$user_id = Request::get('user_id', $default);
$service_id = Request::get('service_id', $default);
// or another way of specifying the accompanying service/user ID for the where clauses
$rules = [
'user_id' => 'unique:service_details,user_id,NULL,id,service_id,' . $service_id;
'service_id' => 'unique:service_details,service_id,NULL,id,user_id,' . $user_id;
];
关于php - 复合唯一键验证 - laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29093061/