【问题标题】:How to custom validation unique multiple column in laravel如何在laravel中自定义验证唯一的多列
【发布时间】:2019-12-10 16:17:23
【问题描述】:

我有带有 (id, name, company) 的合同表 还有我的规则:

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

当我创建时

id = 1、name = A、company = C 的合同一

id = 2,name = A,company = C 的合同二。这是错误的。

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

如果合同二的 id = 2,name = B,company = C。没关系。

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

【问题讨论】:

    标签: php laravel validation laravel-5 rules


    【解决方案1】:

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

    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

    【讨论】:

      【解决方案2】:

      以下将用于创建

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

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

      table[,column[,忽略值[,忽略列[,where 列,where 值]...]]]

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

      【讨论】:

        猜你喜欢
        • 2014-12-16
        • 2021-11-30
        • 2021-04-16
        • 2021-01-23
        • 2021-04-28
        • 2014-08-08
        • 2018-10-25
        • 2017-08-14
        • 2022-01-25
        相关资源
        最近更新 更多