2013-08-17 50 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