使用 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 中的验证器检查两个表中两列的唯一性的主要内容,如果未能解决你的问题,请参考以下文章
如何根据数据透视表中两列(两个外键)中的 ID 返回相关模型?