2015-06-10 77 views
0

我有一個表'user_temps',它包含新用戶,直到他們確認其訂閱。完成後,我將用戶複製到'用戶'表。Laravel 5:使用不同消息驗證2個表中的字段

在登記表我有此驗證PARAMS:

'email' => 'required|email|max:255|unique:user_temps|unique:users', 

的問題是有我需要有2個不同的消息: 如果用戶是在「user_temps」表,另一個如果用戶在'用戶'表中。

謝謝

+0

爲什麼你將未經確認的用戶存儲在單獨的表中?如果你想知道用戶什麼時候確認了他們的賬戶,只需要一個包含布爾值的「已確認」列和一個「已確認的時間戳」列。 –

回答

1

您可以設置自定義驗證消息

​​
+0

'email.unique:user_temps'和'email.unique:users'從不顯示。只顯示'email.unique':( – Lolo

0

爲了簡化問題,你能不能做到以下幾點:

在你的用戶的表,已經認繳命名爲布爾列'默認爲0.那麼當他們確認他們的訂閱後,您可以將其設置爲1?

隨後,在authentication,你可以運行這個檢查:

if (Auth::attempt(['email' => $email, 'password' => $password, 'subscription' => 1])) 
{ 
    // The user is active, subscribed and exists. 
} 
+0

是的Ben我可以按照你的建議去做,但我沒有找到這種方式'漂亮':)我找到了解決方案 – Lolo

+1

@Lolo這比擁有兩張桌子更「美麗」 –

+0

Martin:對於新的學校編程方式,我可能會太老,但是personnaly我會在用戶激活自己的帳戶並在所有頁面中使用該表之前爲用戶設置一張桌子,並且通過這樣做,您可以節省一個範圍(或一個where())。如果用戶有效,則不必驗證每個訪問。 – Lolo

0

想一些不好的解決方案的人(坦克你PMALL)後給了我在另一個地方的答案:

我定義我自己的驗證對於臨時用戶

public function validateTempUserEmail($attribute, $value, $parameters) 
{ 
    return UserTemp::where($attribute, $value)->count() == 0; 
} 

而且現在的規則驗證電子郵件

'email' => 'required|email|max:255|TempUserEmail|unique:users',