2015-08-13 80 views
1

我有兩種類型的用戶 - 真實的和假的。 假用戶是不使用系統的員工。 真實用戶使用他們的電子郵件地址登錄。所以我的用戶遷移有$table->string('email')->unique();關鍵'users_email_unique'空字段的重複條目''

問題是假用戶可能沒有電子郵件地址。我可以添加第一個假用戶沒有問題,但第二個生成錯誤SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key 'users_email_unique'

我該怎麼辦?

+3

將假用戶插入爲NULL,這項工作是因爲mysql將NULL值視爲unqiue – Mihai

+0

爲什麼不製作兩個表,比如'tblrealUsers'和'tblfakeUsers'? –

+0

如果您要讓多個用戶使用「」電子郵件,則電子郵件字段不能唯一。喲必須刪除限制或使用任何「棘手」的解決方案,例如:「[email protected]」是XX的用戶ID。 –

回答

1

聽起來像users_email_unique是您的主要關鍵。這意味着,當您插入您的第一個虛假的用戶與一個空白的電子郵件地址,空白條目被計爲一個唯一的條目。當您輸入第二個空白條目時,它違反了實體完整性(重複主鍵)。

users_email_unique unique? 
_________________  _______ 
[email protected]  yes 
blank     yes 
blank     no 

如果需要多個空白項,你可以讓users_email_uniquenull,但是,主鍵列cannot contain null values

users_email_unique unique? 
__________________ ________ 
[email protected]  yes 
NULL     yes 
NULL     yes 

如果您正在使用users_email_unique作爲主鍵,然後,作爲中指出在評論中,您可能需要:

  • 爲'假'用戶臨時生成隨機唯一電子郵件
  • 重新考慮你對你的表的主鍵(或許是某種形式的唯一ID?)
  • 可能分裂成兩個表,一個是「真實」的用戶,一個用於「假」
+0

我去'$ table-> dropUnique('email_users_unique');',但我寧願將電子郵件設置爲'NULL'如果用戶是假的,他的電子郵件沒有提供。 –

0

可以在行動2種方式:

  • 刪除線,其中電子郵件是空(如果是用戶是不是假的這個過程會殺死自己的賬戶)
  • 給人以就像是隨機的@ myfakedomain自定義域隨機電子郵件。假的,然後你可以在課堂上控制喲ü登錄如果郵件假郵件相匹配,並要求用戶插入一個真正的郵件,如果他想繼續使用該網站

(最終你可以有一個,而第二個解決方案,然後傳遞到1st)

相關問題