2017-07-31 80 views
1

我的验证规则是...Laravel验证:唯一例外不工作为一个用户

$rules = []; 

    foreach($this->request->get('email') as $key=>$value){ 
     $rules['email.'.$key] = 'required|regex:/[a-zA-Z][email protected][a-zA-Z]+(\.[a-zA-Z]+)+/|unique:admins,admin_email,'.$this->request->get('admin_id')[$key].',admin_id'; 
    } 

基本上,规则是它的需要,通过正则表达式,而电子邮件是不是已经在使用与电子邮件正被特定行使用的例外。然而,当我跑的形式我得到这个错误信息:

The email.0 has already been taken. 

需要明确的是,这种形式的有8个不同的用户,只有第一个是给我这个问题。我做了一个dd()规则来看看应用的验证规则之间有什么不同,但我没有看到任何规则。

"email.0" => "required|regex:/[a-zA-Z][email protected][a-zA-Z]+(\.[a-zA-Z]+)+/|unique:admins,admin_email,0,admin_id" 

"email.1" => "required|regex:/[a-zA-Z][email protected][a-zA-Z]+(\.[a-zA-Z]+)+/|unique:admins,admin_email,1,admin_id" 

"email.2" => "required|regex:/[a-zA-Z][email protected][a-zA-Z]+(\.[a-zA-Z]+)+/|unique:admins,admin_email,2,admin_id" 

如果我更新email.0,我没有得到这个问题。无论是否更新email.0,我也不会在其他任何行中遇到此问题。由于存在外键约束,我无法删除此用户。令人难以置信的是,admin_id这个特定的管理员0。或者,换句话说,这是表的外观为这个特定条目

admin_id|admin_email 
--------+------------ 
    0 | [email protected] 

编辑:哪里Laravel构建和运行实际的查询?如果我可以在数据库日志上执行dd(),我可能能够找到我的问题(请参阅实际的原始查询)。

我明显错过了一些东西 - 任何帮助将不胜感激!

+0

你可以粘贴'DD的输出( request())'在验证和验证代码本身之前? – dbr

回答

2

独特的规则应该不会像这样:

unique:admins,admin_email,0,admin_id 

0是指应该由独特的规则被忽略admin_id列的值。

所以,如果你有表admins为:

admin_id | admin_email 
---------+------------- 
1  | [email protected] 
2  | [email protected] 
3  | [email protected] 

而且您要更新哪里admin_email == [email protected]

你的规则应该看起来

unique:admins,admin_email,2,admin_id 
+0

我不知道你在这里告诉我什么。我知道异常是如何工作的 - 我已阅读文档。该“admin_email”**的“admin_id”值为** 0。 – dmcoding