2013-06-21 29 views
2

我可以使MySQL列可以爲空或唯一在一起。如果用戶想提供其他地方,它將是(空),我有一個表存儲用戶Email_id。我讀過其他一些問題,我可以使用默認的NULL創建一個唯一的字段。但我在創建表如何在mysql(laravel)中使一個varchar爲空或唯一在一起

#1067 - Invalid default value for 'email' (i make it only for test purpose) 

時與larave架構構建類生成的主表得到這個錯誤

$table->text('email')->nullable()->unique(); (no default added) 
在DB

+--------------+------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+--------------+------------------+------+-----+---------+----------------+ 
| email_id  | varchar(200)  | YES | UNI | NULL |    | 

現在的錯誤是

Duplicate entry '' for key 'users_email_id_unique' (when inserting email with empty string) 

現在問題是如何處理一個唯一且可空的varchar字段。

回答

0

我知道這是一個古老的問題,這是對其他人有同樣的問題。

您正在嘗試添加一個空的字符串。你製作的列可以爲空唯一。這意味着你正在嘗試你不應該做的事情。您可以發送多個null值但不是多個字符串。 MySQL認爲爲空作爲一個值。

,或者你可以在你的模式

public function setEmaileAttribute($value) { 
    if (empty($value)) { // will check for empty string 
    $this->attributes['company'] = NULL; 
    } else { 
     $this->attributes['company'] = $value; 
    } 
} 
+1

感謝您的輸入寫mutator。 – netsmertia

0

我不能這樣做。所以我使用其他技術。 我做了一個新字段have_email使默認0,如果用戶提供電子郵件ID我把1在這個領域。

如果您不提供電子郵件ID have_email0並使email字段唯一隻是把你的ID(主鍵)。

相關問題