Laravel - 如何使用规则请求基于条件进行验证

时间:2021-06-07 16:07:29

标签: laravel

在我的 Laravel-8 应用程序中,表中的 company_id 默认为 0:

我有这个请求规则验证:

    'email' => [
        'required',
        'email',
        'min:5',
        'max:80',
        Rule::unique('users', 'email')
    ],
     'company_id' => [
        'nullable',
    ], 

我希望基于两个条件的电子邮件是唯一的:

  1. 如果未选择 company_id,则电子邮件应该是唯一的。

  2. 如果选择 company_id,则电子邮件应与 company_id 唯一。

我如何实现这一目标?

谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用自定义规则

'email' => ['required',
    'email',
    'min:5',
    'max:80',
        function ($attribute, $value, $fail)use($request) {
            $company=Company::where('email',$value)->where(function ($query)use($request){
                if(!empty($request->company_id)){
                    $query->where('company_id',$request->company_id);
                }
                
            })->exists();
            
            if($company){
                $fail('The '.$attribute.' is invalid.');
            }
        
        },
    ],