2015-02-23 118 views
0

我已经开始学习Laravel,并创造了3个迁移文件:Laravel MySQL的外键约束失败

  • 用户
  • 群组
  • Users_usergroups

用户包含用户信息,用户组包含用户组信息,而users_usergroups是一个数据透视表,用于存储哪些用户位于哪个用户组中。

这是我的架构的一个基本的例子:

Users: 
- id 
- global_user_id 
- username 

Usergroups: 
- id 
- group_name 

- Users_usergroups: 
- id 
- user_id 
- group_id 

及后阅读这篇文章:http://daylerees.com/codebright/eloquent-relationships,我有以下外键:

Users: 
- global_user_id references user_id on users_usergroups 

Usergroups: 
- id references group_id on users_usergroups 

Users_usergroups: 
- user_id references global_user_id on Users 
- group_id references id on Usergroups 

每当我尝试添加一条记录到用户或用户组出现错误:

#1452 - Cannot add or update a child row: a foreign key constraint fails 

读取后Mysql error 1452 - Cannot add or update a child row: a foreign key constraint fails据我所知,我无法添加用户,因为users_usergroups中不存在相应的记录,并且由于相同的原因,我无法添加用户组,因此如果用户无法在users_usergroups中创建记录或用户组尚未创建。

所以我的问题是,如果这3个表互相引用,我如何添加记录?我应该为所有表添加外键?

我从上面的SO问题知道我可以指定check_foreign_keys属性,但根据评论,这是一个坏主意。

回答

0

所以摆弄周围与phpMyAdmin和laravel后,它看起来像只users_usergroups表应该有外键,而不是UsersUsergroups表。

我想这是有道理的,但如果我错了,随意张贴替代答案。

0

每个外键都必须引用主表中的一个键。

你只需要这个外键关系: 群组:

Users_usergroups: - user_id references global_user_id on Users - group_id references id on Usergroups

想想Users_usergroups的用户和组之间的连接器表。

顺便说一句我不知道你需要'global_user_id'作为用户表上的'id'字段应该是足够的。