【问题标题】:Laravel validation rule with unique and compare with another columnLaravel 验证规则具有唯一性并与另一列进行比较
【发布时间】:2021-08-18 19:00:46
【问题描述】:

我需要一些帮助

这是我的用户表。我想编写一个 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);
})],

【问题讨论】:

标签: mysql laravel validation rules


【解决方案1】:

您可以为此编写自定义验证

'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-closures

更新

 '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 代码
  • 好的。谢谢。
  • 非常感谢。
  • @Rich.glad to here that.it 帮助您解决了您的问题
猜你喜欢
  • 2015-07-09
  • 2015-02-27
  • 2014-04-19
  • 2019-11-15
  • 2018-02-14
  • 2018-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多