2015-02-23 169 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'字段應該是足夠的。