如何在laravel中进行多字段唯一验证?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在laravel中进行多字段唯一验证?相关的知识,希望对你有一定的参考价值。

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

    $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
}
答案

您可以为此方案创建自己的验证器:

  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'...
另一答案

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

use IlluminateValidationRule;
    $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)的

以上是关于如何在laravel中进行多字段唯一验证?的主要内容,如果未能解决你的问题,请参考以下文章

如何使唯一数组的自定义验证规则依赖于其他字段 laravel

Laravel 4 验证唯一(数据库)忽略当前

具有唯一字段的 Laravel 验证服务

基于数据透视表 laravel 的唯一名称规则验证

laravel 表单验证 多个字段组合后唯一

Laravel 验证:唯一,当名称相同,但其他字段不同时