Laravel验证规则具有唯一性,并与另一列进行比较



这里我需要一些帮助

这是我的用户表。我想写一个laravel验证规则,就像一个group_id应该只有一个用户一样。例如,另一个名为Johngroup_id=1的条目应给出The name has already been taken.错误,但应插入johngroup_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');
}
}],

您可以参考官方文件

https://laravel.com/docs/8.x/validation#using-关闭

更新

'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');
}
}],

最新更新