繁体   English   中英

如何在Laravel中自定义验证唯一多列

[英]How to custom validation unique multiple column in laravel

我有带有(id,名称,公司)的合同表,还有我的规则:

public function rules()
{
    return [
        'name'    => 'required',
        'company' => 'required'
    ];
}

当我创建

合同编号为1,名称为A,公司为C的合同

合同二,id = 2,名称= A,公司=C。这是错误的。

因为我希望公司不能使用相同的合同名称。

如果合同2的ID = 2,名称= B,公司=C。可以。

所以我想知道这两个列的自定义名称和公司字段如何相互绑定

您可以为此使用自定义规则关闭。

public function rules()
{
        return [
            'name' => [
                          'required', 
                           function($attribute, $value, $fail) use($this){
                               $exists = \DB::('contracts')->where('company', $this->company)->where('name', $this->name)->exists();
                               if(!exists){
                                   $fail($attribute.'already added for this company.');
                               }
                           }
                      ],
            'company' => 'required'
        ];
}

我希望你明白。

您可以在此处查看文档: https : //laravel.com/docs/5.8/validation#custom-validation-rules

以下将在创建上工作

'name' => 'required|unique:contracts,name,'.$this->id.',NULL,id,company,'.$request->input('company')

唯一规则的(未记录)格式为:

table [,column [,ignore value [,ignore column [,where column,where value] ...]]]

可以指定多个“ where”条件,但只能检查是否相等。 其他任何比较都需要使用闭包(如接受的答案中所示)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM