2013-08-17 73 views
2

在Laravel 4的口才,雄辯的外鍵相同的表

我有一個表user和現場user.friend_id這是一個用戶的也是一個ID ..

,但是當我嘗試創建一個新的用戶與friend_id = 0,外鍵失敗..

並且當friend_id = 1時,它成功。

我有這個在我的用戶的架構構建

$table->unsignedInteger('friend_id')->default(0)->nullable(); 

我應該怎麼來這裏做什麼?

應該我剛剛創建了一個數據透視表嗎?

的感謝!

回答

2

假設你可以有一個以上的朋友,那麼,你應該有一個數據透視表

用戶表

id | name 
1 | Laurence 
2 | Ben 
3 | Jane 

Users_Friend表

user_id | friend_id 
    1  | 2 
    1  | 3 

這意味着勞倫斯是本和簡的朋友

+0

但很喜歡樹..想象的網絡人的金字塔..一個用戶可以有很多朋友..和那個朋友能有更多的「下線」 – reikyoushin

+0

還是結束了創建一個數據透視表代替。謝謝! – reikyoushin

4

您不應將空值外鍵的默認值設置爲0。

正確方法:

$table->unsignedInteger('friend_id')->nullable(); 

說明:

$table->unsignedInteger('friend_id')->default(0)->nullable(); 

當您嘗試插入一個新的記錄,並保留friend_id空白。

  • 數據庫採用默認值的字段,即:0
  • 因爲它是一個外鍵,維護關係完整性,它會尋找有記錄的主鍵0(這自然不存在)
+0

另請確保您的ID具有您的RDBMS外鍵(例如INTEGER)的兼容類型。否則,您將收到類似「errno:150外鍵約束錯誤地形成」的內容。 – metamaker