Mysql 具有唯一性并与另一列比较的Laravel验证规则
我需要一些帮助 这是我的用户表。我想写一个laravel验证规则,就像一个Mysql 具有唯一性并与另一列比较的Laravel验证规则,mysql,laravel,validation,rules,Mysql,Laravel,Validation,Rules,我需要一些帮助 这是我的用户表。我想写一个laravel验证规则,就像一个组id应该只有一个用户一样。例如,另一个名为John和group_id=1的条目应给出已获取的名称。错误,但应插入John和group_id=2 *************************** 1. row *************************** id: 1 name: jhon group_id: 1 created_at: 2021-05-31
组id应该只有一个用户一样。例如,另一个名为John
和group_id=1
的条目应给出已获取的名称。
错误,但应插入John
和group_id=2
*************************** 1. row ***************************
id: 1
name: jhon
group_id: 1
created_at: 2021-05-31 10:23:42
updated_at: 2021-05-31 10:23:42
*************************** 2. row ***************************
id: 2
name: michele
group_id: 2
created_at: 2021-05-31 10:23:42
updated_at: 2021-05-31 10:23:42
我试过下面的方法,但不起作用。有人能帮我吗
'user.name' => ['required','unique:user,name'.$this->user->id,Rule::unique('user')->where(function ($query) {
return $query->where('group_id', $this->user->group_id);
})],
您可以为此编写自定义验证
'user.name' => ['required',function ($attribute, $value, $fail) {
$user= User::where(function ($query){
$query->where('name',$this->name);
$query->where('group_id',$this->group_id );
})->exists();
if($user){
$fail('User with group already exist');
}
}],
你可以参考官方文件
更新
'user.name' => ['required',function ($attribute, $value, $fail) {
$user= User::where(function ($query){
$query->where('id','!=',$this->user->id)
$query->where('name',$this->user->name);
$query->where('group_id',$this->user->group_id );
})->exists();
if($user){
$fail('User with group already exist');
}
}],
这回答了你的问题吗?Tnx感谢您的快速响应,它正在发挥作用。但是我想忽略当前行以进行唯一验证,否则当我尝试更新用户时,它将给出一个错误。我怎样才能做到这一点?以前它是有效的,我使用了required | unique:user,name'.$this->user->id
code我会更新它。请稍等几分钟。谢谢。@Rich。检查我的更新答案非常感谢。