2014-09-04 109 views
0

我正在驗證客戶表中的電子郵件地址。有所謂的品牌在客戶表中的列,其中有效的電子郵件地址,可以註冊多個品牌,例如:Laravel驗證器唯一值

Email    Brand 
[email protected] firstsite.com 
[email protected] secondsite.com 

當驗證我需要檢查電子郵件的電子郵件地址是Customer表的唯一目前的品牌。目前我的驗證規則看起來像這樣

$rules = array('email' => 'required|email|unique:Customer,Email'); 

但品牌必須出現在那裏的人說的電郵地址必須是唯一的,以客戶爲目前品牌

任何幫助非常讚賞

回答

0

$規則=數組('email'=>'required | email | unique:Customer,Email');如果電子郵件已經存在,則會查詢您的模型以查找輸入的電子郵件,然後發出錯誤消息。所以這不適用於您的應用設計流程。如果沒有保存數據,則必須運行sql查詢以查明電子郵件是否與當前品牌一同出現。類似的東西

1

您可以使用唯一驗證規則的列和值參數將條件添加到規則。

'email' => 'required|email|unique:Customer,Email,null,null,column,value' 

的問題是你需要爲了你的品牌輸入來創建你的規則是這樣的:

$rules['email'] = 'required|email|unique:Customer,Email,null,null,Brand,' . Input::get('Brand'); 

此規則將檢查郵件是否是唯一的地方品牌有給定值。

點擊此處瞭解詳情: http://laravel.com/docs/validation#rule-unique

還有一個包,可以幫助你: https://github.com/felixkiss/uniquewith-validator

+0

好。只是將有助於解釋爲什麼和如何,以及這個'null,null'部分的含義。 – 2014-09-04 16:10:59

+0

我的壞,有actualy只有一個空,這個參數是忽略給定的ID,所以你可以設置爲空,如果你不需要它。 – Needpoule 2014-09-04 20:43:04

+0

不是真的,你的代碼是正確的。你現在需要'null,null',現在你編輯它不正確。我只是說你應該給你回答這個解釋,以便它有更有價值的信息。 – 2014-09-04 21:42:13

0

我會去寫我自己的自定義的驗證規則。自定義驗證規則將是更常見的解決方案,您可以將其命名爲最適合您的方案。它可以使用驗證創建::延伸()和閉合,這樣的:

Validator::extend('awesome', function($field, $value, $params) 
{ 
    return $value == 'awesome'; 
}); 

或經由驗證器類。對此主題進行研究,可能是here (scroll to custom rules section)或您找到的任何其他來源。