Symfony 合并多通和单通时的原则错误:删除时的ForeignKeyConstraintViolationException

Symfony 合并多通和单通时的原则错误:删除时的ForeignKeyConstraintViolationException,symfony,doctrine-orm,doctrine,Symfony,Doctrine Orm,Doctrine,我有以下实体设置:供应商销售许多产品(供应商之间不共享),并有一个联系人。产品只属于一个供应商,并且有许多联系人(不在产品之间共享) 小贩 编辑(我需要写答案来帮助我思考。现在我编辑它以使其清晰) 删除产品将触发删除联系人(因为级联={…“删除”}) 删除联系人触发删除供应商(因为删除) 删除供应商触发删除产品(因为删除) 和它还会触发删除联系人(因为级联={…“删除”}) 我认为在这一删除链中,联系人的删除发生在产品的删除之前,这会触发完整性约束违反。我认为您应该做的第一件事是删除不必要的“删

我有以下实体设置:供应商销售许多产品(供应商之间不共享),并有一个联系人。产品只属于一个供应商,并且有许多联系人(不在产品之间共享)

小贩
编辑(我需要写答案来帮助我思考。现在我编辑它以使其清晰)

删除
产品
将触发删除
联系人
(因为
级联={…“删除”}


删除
联系人
触发删除
供应商
(因为
删除

删除
供应商
触发删除
产品
(因为
删除
它还会触发删除
联系人
(因为
级联={…“删除”}


我认为在这一删除链中,
联系人
的删除发生在产品
的删除之前,这会触发完整性约束违反。

我认为您应该做的第一件事是删除不必要的“删除”和“删除”。我建议您阅读@vincentPHILIPPE I实际上只有orphanRemoving=true,然后添加cascade={“remove”},以防需要。这两种情况都会引发相同的错误。但我知道,我只需要去除孤儿,因为它更强大。关于您发布的文章:我知道使用onDelete=“CASCADE”可以解决问题,但这不是我问题的核心:为什么删除供应商的OneToOne关系可以解决外键错误?这毫无意义,因为错误说明了产品和联系人之间的关系。谢谢您的详细回答!我不是删除供应商(你的第一句话),我只是指删除产品。删除产品时,我希望发生以下情况:product removed=>Cascade Removement in the direction of product Contacts=>Cascading stops,因为Contact实体不级联任何内容。那么,为什么错误明确地谈论接触和产品之间的关系,它应该级联删除!此外,我仍然对供应商的角色感到困惑,它没有被删除,即使是通过级联也没有,因此在产品删除中它应该无关紧要,
Vendor
将在
Contact
删除后立即被删除,因为您将此注释添加到它:
targetEntity=Contact::class,cascade={“persist”,“remove”},孤立删除=真
。但是在我的第一句话中,我对这一点不是很清楚,我同意,好吧,对不起,这是错误的。如果我在供应商中添加此注释,则删除供应商时会删除联系人。您自己链接的文章实际上说:“…在实体中添加cascade={“remove”},删除该实体时应删除与其关联的其他实体。因此,不要在删除另一个相关对象时将其添加到要删除的实体中…”。供应商正在向联系人而不是相反方向层叠。“删除
联系人
触发删除
供应商
(因为
删除
)”。这是不正确的,孤立删除是在
供应商
端进行的(请参阅您链接的文章)。即使您在
供应商
中删除了
删除
,也会抛出错误。看,您只是不明白这篇文章是怎么说的。想一想。不要那样过度回答。删除
联系人
触发删除
供应商
正是因为
删除
。现在,由于你的问题不再是一个bug,我假设这个主题已经结束了。
An exception occurred while executing 'DELETE FROM product WHERE id = ?' with params [12]:

SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`test_project`.`contact`, CONSTRAINT `FK_4C62E6384584665A` FOREIGN KEY (`product_id`) REFERENCES `product` (`id`))
"doctrine/doctrine-bundle": "^2.3",
"doctrine/orm": "^2.8",