Symfony2学说级联删除子关系

时间:2012-12-27 13:13:23

标签: symfony doctrine

考虑一个有0..n Child的父母。当我从Parent中删除Child并保持Parent对象时,我需要删除Child。目前,我实现这一目标的唯一方法是实际删除Child,例如:

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

我认为我的关系设置正确,因为如果我完全删除了Parent,那么Child也会从数据库中删除。为什么以下行不足以删除Child?:

$parent->removeChild($child);

小背景信息:我正在尝试使用x Child对象更新Parent对象,我需要删除之前关联的Child,并添加新的Child。但我觉得我应该迭代这两个集合,找出要删除和/或添加的集合。

有人有明确的例子吗?请忘记Symfony的/ Doctrine的文档。我已经读完了所有内容!

2 个答案:

答案 0 :(得分:2)

孩子们有自己的生命,你不应该因为他们与父母分开而摆脱他们。换句话说,这些是单独的实体,并且有许多用例会破坏关系但仍想维护这两个对象,因此当我们删除它的关系时,我们不会自动删除对象。

你的直觉是对的,你需要迭代这两个列表。我知道你说你读过所有的文档,但是再看看How to Embed a Collection of Forms的结尾。它包括父对象的工作编辑功能,它正是这样做的。

答案 1 :(得分: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