Symfony2原则级联删除子关系

Symfony2原则级联删除子关系,symfony,doctrine,Symfony,Doctrine,考虑一个具有0..n个子级的父级。当我从父对象中删除子对象并持久化父对象时,我需要删除子对象。目前,我工作的唯一方法就是实际移除孩子,比如: $parent->removeChild($child); $em->remove($child); 我认为我的关系设置正确,因为如果我完全删除父对象,那么子对象也将从数据库中删除。为什么下面的行不足以移除该子对象 $parent->removeChild($child); 小背景信息:我正在尝试用x个子对象更新父对象,我需要删除以前

考虑一个具有0..n个子级的父级。当我从父对象中删除子对象并持久化父对象时,我需要删除子对象。目前,我工作的唯一方法就是实际移除孩子,比如:

$parent->removeChild($child);
$em->remove($child);
我认为我的关系设置正确,因为如果我完全删除父对象,那么子对象也将从数据库中删除。为什么下面的行不足以移除该子对象

$parent->removeChild($child);
小背景信息:我正在尝试用x个子对象更新父对象,我需要删除以前关联的子对象并添加新的子对象。但我觉得我应该对这两个集合进行迭代,以确定要删除和/或添加哪些集合


有没有人有一个明确的例子?请忘记Symfony/Doctrine的文件,。我都看过了

孩子们有自己的生活,你不应该仅仅因为他们与父母分离就把他们赶走。换言之,这些是独立的实体,在许多用例中,您可能会中断一个关系,但仍然希望维护这两个对象,因此我们不会在删除对象的关系时自动删除该对象


你的直觉是对的,你确实需要重复这两个列表。我知道你说你读了所有的文档,但请再看一看最后的部分。它包括一个用于父对象的工作编辑功能,该功能正是这样做的

如果您有没有父实体就不应该存在的子实体,并且父实体私有子实体,则可以使用孤儿移除

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

$contact->standingData(new StandingData("Firstname", "Lastname", "Street"));
如果联系人有一个旧的“standingData”,它将从DB中删除。
有关更多信息,请参阅。

根据文档,您必须同时执行这两项操作,但他们建议将其封装到函数中。您的解释听起来很公平。我提到的迭代与您指出的文档完全相同。然而,我有一个用于web的控制器和一个用于编辑父对象子对象的RESTAPI控制器。如果你看一下文档,这意味着我得到了4个“foreach”语句,只是为了处理孩子之间的关系。有两个独立的控制器意味着我实际上需要8条语句来更新child。我觉得这可以用一种更干净、更简单的方式来完成?就不迭代而言,php并没有真正需要更直接地处理的那种数据结构(比如python dict)。您可能可以设计出更高效的产品,但除非您处理的是大型阵列,否则这不会成为一个大问题。至于代码的效率,你是对的,这是不必要的重复。正如@jaudette所建议的,我将把整个过程封装在一个函数中,可能是实体的条令类中。然后您可以简单地调用$object->editChildren($array),并将所有逻辑保持在一个位置。