【问题标题】:Laravel validation: exists two column same rowLaravel验证:存在两列同一行
【发布时间】:2017-11-10 06:57:25
【问题描述】:

在 Laravel 中指定存在验证规则时,有没有办法引用另一个字段?

我的要求:

public function rules()
    {

        return [
            'numero_de_somme' => 'unique:personnels,numero_de_somme|exists:fonctionnaire,num_somme',
            'cin' => 'unique:personnels,cin|exists:fonctionnaire,cin',

        ];
    }

在我的验证规则中,我希望能够确保:

  • num_somme 存在于 fonctionnaire 表中
  • cin 存在于函数表中,cin 输入必须是 在num_somme的同一行

num_somme : 12345 cin : s89745

num_somme : 78945 cin : U10125

解释:例如

  • 第一种情况,如果输入 num_somme = 12345 和 cin = U10125,则验证必须失败
  • 第二种情况,如果输入 num_somme = 12345 和 cin = s89745 验证必须成功

我希望这是有道理的。

谢谢

【问题讨论】:

    标签: php laravel validation rules


    【解决方案1】:

    你可以简单地使用这个:

    'request_input' => exists:table,col,alternative_col_1,alternative_val_1,alternative_col_2,alternative_val_2, ...'
    

    SQL 查询如下:

    select count(*) as aggregate from `table` where `id` = [request_input] and `alternative_col1` = "alternative_val1" and `alternative_col2` = "alternative_val2"
    

    【讨论】:

      【解决方案2】:

      您可以使用Rule实现对多列的验证。

      包括:

      use Illuminate\Validation\Rule;

      use Validator;

      $AdminId = $request->AdminId;
      $Validate = Validator::make($request->all(),[
              'TaxId' => [ 'required', Rule::exists('tax','id')                     
                                          ->where(function ($query) use ($AdminId) {                      
                                          $query->where('u_id', $AdminId);                  
                                          })], 
          ]);
      if($Validate->fails())
              {`Your ERROR HERE`}
      else
              {`SUCCESS`}
      

      在我的示例中,我正在检查同一行和 2 列中的 u_id 和 Id。

      解释:例如

      我的数据库在税表中有 2 行

      id = 1 , u_id = 1, tax = "GST" , value -> 8

      id = 2 , u_id = 2, tax = "GST" , value -> 5

      第一种情况,如果输入 id = 2 和 u_id = 1,验证必须失败,因为该行属于 u_id = 2。

      第二种情况,如果输入 id = 2 and u_id = 2,验证必须成功

      【讨论】:

        【解决方案3】:

        我设法用最简单的方法解决了它

        • numero_de_somme

        'numero_de_somme' => 'unique:personnels,numero_de_somme|exists:fonctionnaire,num_somme,cin,'.Request::get('cin'),

        • cin

        'cin' => 'unique:personnels,cin|exists:fonctionnaire,cin',

        附言。别忘了拨打use Illuminate\Http\Request;

        【讨论】:

        • 在存在规则上使用 num_somme,您又指的是 numero_de_somme?
        【解决方案4】:

        我今天遇到了同样的需求,我想我有一个使用验证规则类的解决方案:Rule example

        这是我的场景:我有一个电子邮件验证表,我想确保传递的机器码和激活码存在于同一行。

        一定要包含use Illuminate\Validation\Rule;

        $activationCode = $request->activation_code;                                   
        
        $rules = [                                                                     
            'mc' => [                                                                  
                'required',                                                            
                Rule::exists('email_verifications', 'machineCode')                     
                ->where(function ($query) use ($activationCode) {                      
                    $query->where('activationCode', $activationCode);                  
                }),                                                                    
            ],                                                                         
            'activation_code' => 'required|integer|min:5',                             
            'operating_system' => 'required|alpha_num|max:45'                          
        ];
        

        exists 方法中的第一个参数是表格,第二个参数是我用于“mc”字段的自定义列名。我传递了我想使用“use”关键字检查的第二列,然后在 where 子句中使用该字段。

        【讨论】:

          猜你喜欢
          • 2020-06-10
          • 1970-01-01
          • 2020-04-18
          • 1970-01-01
          • 1970-01-01
          • 2020-10-31
          • 1970-01-01
          • 1970-01-01
          • 2020-10-05
          相关资源
          最近更新 更多