我遇到了数据库提交查询顺序的问题。我有一个实体A,它有一个或多个B实体。我想要做的是将B实体移动到另一个A实体,然后删除它们刚刚移动的B条目。
示例:
这是我的示例实体在任何操作之前查看的内容
A (Mike)
- B (John)
- B (Dave)
A (Jake)
- B (Robert)
我的代码看起来像
// already fetched
$mike = $em->getRepository('A')->find(1);
$jake = $em->getRepository('A')->find(2);
foreach($jake->getBs() as $b) {
$b->setA($mike);
}
$em->persist($mike);
$em->remove($jake)
$em->flush();
所以基本上,我将'杰克'的所有相关实体移动到'迈克',然后移除'杰克'。问题是Doctrine试图首先删除'Jake',这使约束失败,因为'Robert'仍然指向'Jake'。
这样做的正确方法是什么?