1

考虑一个有 0..n 个孩子的父母。当我从父对象中删除子对象并保留父对象时,我需要删除子对象。目前,我得到这个工作的唯一方法是实际删除孩子,就像这样:

$parent->removeChild($child);
$em->remove($child);

我认为我的关系设置正确,因为如果我完全删除父项,则子项也会从数据库中删除。为什么以下行不足以删除孩子?:

$parent->removeChild($child);

很少的背景信息:我正在尝试使用 x 个子对象更新父对象,我需要删除以前关联的子对象并添加新的子对象。但我觉得我应该需要遍历这两个集合以找出要删除和/或添加的集合。

有没有人有一个明确的例子?请忘记 Symfony 的/Doctrine 的文档。我都读过了!

4

2 回答 2

2

孩子有自己的生活,你不应该仅仅因为他们与父母分开就抛弃他们。换句话说,它们是独立的实体,在许多用例中,您会破坏关系但仍想维护两个对象,因此当我们删除它的关系时,我们不会自动删除一个对象。

您的直觉是正确的,您确实需要遍历这两个列表。我知道您说过您阅读了所有文档,但请再看一下如何嵌入表单集合的结尾。它包括一个用于父对象的工作编辑功能,它正是这样做的。

于 2012-12-27T15:32:26.013 回答
1

如果您的子实体在没有父实体的情况下不应该存在,并且父实体私有地拥有子实体,那么您可以使用 orphanRemoval。

/** 
 * @OneToOne(targetEntity="StandingData", orphanRemoval=true) 
 */
private $standingData;

$contact->standingData(new StandingData("Firstname", "Lastname", "Street"));

如果联系人有旧的“standingData”,它将从数据库中删除。有关更多信息,请参阅http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/working-with-associations.html#orphan-removal

于 2015-10-07T12:30:42.730 回答