我遇到了与桌子有关的问题。简而言之,我将表从Postgres数据库迁移到mysql数据库。由于我使用的是Laravel,因此Eloquent可以轻松迁移表格"用户"和"团体"因为它们也是对象,所以我所做的只是将postgres结果转换为Json,添加每个元素并将其保存到laravel的mysql DB中。 用户和群组之间存在多对多关系。 Postgres还包含一个"用户组"有这种关系的表。而且我设法保持与postgres相同的身份。但是将它保存到mysql的代码与之前略有不同(保存用户和组)。这就是我正在做的事情:
foreach ($jsonData as $rel) {
DB::table('group_user')->insert(array(
array('user_id' => $rel['user_id']),
array('group_id' => $rel['group_id']),
));
}
两种数据库中的DB格式基本相同。 唯一的区别是group_user有自己的自动递增ID以及user_id和group_id的外键
尝试运行上述功能会导致此结果。
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a
child row: a foreign key constraint fails (`ProjectName`.`group_user`,
CONSTRAINT `group_user_group_id_foreign` FOREIGN KEY (`group_id`) REFERENCES
`groups` (`id`)) (SQL: insert into `group_user` (`user_id`) values (1), (1))
我不明白为什么,有一个id为1的用户和一个id为1的组。该表在postgres DB中完全正常运行。我担心的是,我与现有数据建立了关系,这可能是造成这些问题的原因。 感谢您的时间和耐心。
编辑:更正的查询就像这个btw
foreach ($jsonData as $rel) {
DB::table('group_user')->insert(array(
array('user_id' => $rel['user_id'], 'group_id' => $rel['group_id']),
));
}
非常感谢@Mark B