考虑一个有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的文档。我已经读完了所有内容!
答案 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。