Laravel MySQL外键约束失败

时间:2015-02-23 13:38:34

标签: mysql laravel foreign-keys

我开始学习Laravel,并创建了3个迁移文件:

  • 用户
  • 群组
  • 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个表互相引用,我该如何添加记录?我应该为所有表添加外键吗?

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

2 个答案:

答案 0 :(得分:0)

所以在摆弄PHPMyAdmin和laravel之后,看起来只有users_usergroups表应该有外键,而不是UsersUsergroups表。

我觉得这有点道理,但如果我错了,请随意发表另一个答案。

答案 1 :(得分:0)

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

您只需要此外键关系: 群组:

  

Users_usergroups:    - user_id引用用户的global_user_id    - group_id引用Usergroups上的id

将Users_usergroups视为用户和组之间的连接器表。

顺便说一下,我不确定您是否需要' global_user_id'作为' id'用户表上的字段应该足够了。