使用 Laravel 中的验证器检查两个表中两列的唯一性

Posted

技术标签:

【中文标题】使用 Laravel 中的验证器检查两个表中两列的唯一性【英文标题】:Check uniqueness of two columns in two tables using validator in 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 列中检查电子邮件,我如何在这里检查两个表?

【问题讨论】:

【参考方案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)

以上是关于使用 Laravel 中的验证器检查两个表中两列的唯一性的主要内容,如果未能解决你的问题,请参考以下文章

laravel中独特的两列

如何检索表的值以获取sql中两列的最大值

如何根据数据透视表中两列(两个外键)中的 ID 返回相关模型?

用LINQ将select中两列的结果合并到一个数组中?

sql server 中有一张表,我想把表中两列的数据合并后插入本表中另一列!请问怎么实现

基于sql中的第三列返回两列的所有组合