2017-07-31 188 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