【问题标题】:Check uniqueness of two columns in two tables using validator in Laravel使用 Laravel 中的验证器检查两个表中两列的唯一性
【发布时间】:2020-03-03 18:07:13
【问题描述】:

我正在输入一个名为“电子邮件”的字段,并使用 laravel 验证器对其进行检查。问题是我想确保“电子邮件”数据在两个不同表的两列中应该是唯一的。 (卖家和买家的“电子邮件”列中的电子邮件不得相同)。

我能够检查一个表和列的输入,我应该如何检查两个列的输入?下面是我的代码。

    return Validator::make($data, [
        'name' => ['required', 'string', 'max:255'],
        'emailOrNumber' => ['required', 'string','email','max:255','unique:usersNew,email'],
        'password' => ['required', 'string', 'min:8'],

         ]);

上面的代码只在 usersNew 表和 email 列中检查电子邮件,我如何在这里检查两个表?

【问题讨论】:

    标签: php mysql laravel validation


    【解决方案1】:

    您可以使用两次unique 规则。对于每个表,您需要检查一个字段的唯一性:

    'email' => [..., 'unique:table1', 'unique:table2'],
    

    当您不将列传递给 unique 规则时,它将使用当前正在验证的字段名称,在本例中为 email

    Laravel 6.x Docs - Validation - Rules - unique

    【讨论】:

      【解决方案2】:

      试试这个,

      return Validator::make($data, [
          'email' => ['required',     'string','email','max:255','unique:user|unique:email'],
          'password' => ['required', 'string', 'min:9'],
      
           ]);
      

      在此代码中,unique:username|unique:email 将假定电子邮件和用户名是唯一的

      【讨论】:

        【解决方案3】:

        随便用吧

        'email' => 'unique:table1,your_column_name|unique:table2:your_column_name_2'
        

        或者用它回答https://laracasts.com/discuss/channels/laravel/validate-a-field-from-2-tables-with-different-message

        【讨论】:

        • 使用您的方法后,它显示以下错误,SQLSTATE[42S22]: Column not found: 1054 Unknown column 'email|unique:sellers:email' in 'where clause' (SQL: select count( *) 作为来自usersNew 的聚合,其中email|unique:sellers:email = faisal@yahoo.com)
        • table2 之后的 : 应该是 , ... ...|unique:table2,your_column_name_2 .... 因为 OP 使用的是数组,所以第一个和第二个唯一(规则)需要是分开...[..., 'unique:table1,email', 'unique:table2,email']
        【解决方案4】:

        使用下面的代码

         return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'emailOrNumber' => ['required',     'string','email','max:255','unique:usersNew|unique:email'],
            'password' => ['required', 'string', 'min:8'],
        
             ]);
        

        希望对你有帮助

        【讨论】:

        • 感谢您的回复,但是我的表格中有列名电子邮件,您在上面的代码中没有提到列名,我应该将列名放在哪里?
        • 使用这个 - 'unique:usersNew,column_name1|unique:email,column_name2'
        • 没用。显示如下错误 SQLSTATE[42S22]: Column not found: 1054 Unknown column 'email|unique:sellers:email' in 'where clause' (SQL: select count(*) as aggregate from usersNew where email|unique:sellers:email = faisal@ yahoo.com)
        猜你喜欢
        • 1970-01-01
        • 2017-10-30
        • 2013-08-30
        • 2012-10-10
        • 1970-01-01
        • 1970-01-01
        • 2020-04-30
        • 2018-12-03
        • 1970-01-01
        相关资源
        最近更新 更多