【问题标题】:How to do multi field unique validation in laravel?如何在 laravel 中进行多字段唯一验证?
【发布时间】:2023-04-09 01:16:02
【问题描述】:

所有其他验证工作正常,但我必须验证 国家代码为唯一的手机号码并生成自定义验证消息。请帮帮我。

    $validator = Validator::make($request->all(), [
        'first_name'=> 'required|min:2|max:30',
        'last_name' => 'required|min:2|max:30',
        'email'     => 'required|unique:users,email,'.$userId,
        'mobile'    => 'required|numeric|min:10|unique:users,mobile,'.$userId,
    ]);
if ($validator->fails()){
            $response['status'] = "false"; 
            $response['message'] = $this->validationHandle($validator->messages());  
            $response['data'] = []; 
            $this->response($response);
        }else{
//true function response
}

【问题讨论】:

标签: php laravel validation


【解决方案1】:

您可以为此场景创建自己的验证器:

  Validator::extend('custom_unique',

         function ($attribute, $value, $parameters, $validator) {

         // Get table name from first parameter
            $table = array_shift($parameters);

        // Build the query
           $query = DB::table($table);

       // Add the field conditions
          foreach ($parameters as $i => $field) {
            $query->where($field, $validator->getData()[$field]);
          }

      // Validation result will be false if any rows match the combination
          return ($query->count() == 0);

   });

你可以使用它:

 //table_name - users 
 //fields -  user_id,mobile_no,etc..
'mobile' => 'required|numeric|min:10|custom_unique:users,user_id,mobile_no'...

【讨论】:

    【解决方案2】:

    首先在控制器顶部包含 Rule 类,然后为移动设备更改验证如下。

    use Illuminate\Validation\Rule;
        $validator = Validator::make($request->all(), [
                'first_name'        => 'required',
                'last_name'         => 'required',
                'email'             => 'required|unique:users',
                'mobile'            => ["required","numeric","min:7",Rule::unique('users')->where(function ($query)use ($request) {
                                            return $query->where('country_id',"=", $request->country_id);
                                        })],
                'country_id'        => 'required|numeric',
                'password'          => 'required|min:8|max:15',
                'account_type'      => 'required',
                'device_type'       => 'required',
                'device_token'      => 'required',
            ]); 
    

    希望你得到正确的答案。 (y)

    【讨论】:

      猜你喜欢
      • 2019-03-24
      • 2018-04-28
      • 2019-07-06
      • 2023-03-20
      • 2015-05-15
      • 2018-08-09
      • 2022-01-12
      • 2020-08-02
      相关资源
      最近更新 更多