Orm 如何在合并doctrine2中对象的反序列化图时自动删除孤立项?

Orm 如何在合并doctrine2中对象的反序列化图时自动删除孤立项?,orm,symfony,merge,doctrine-orm,orphan,Orm,Symfony,Merge,Doctrine Orm,Orphan,我正在使用Symfony2和Doctrine2构建后端API。 此API将在数据库中接收要CRUD的对象图 我使用伟大的JMSSerializer包将json编码的对象图反序列化为分离的实体图,然后我想直接将该图合并到数据库中 在我的代码中,我有两个实体:父实体和子实体。父级中定义了一个OneToMany(cascade={“all”},orphanRemoving=true)关系 在我的数据库中,我有一个id为1的父行,它有3个id为1、2、3的子行 我想写一些类似的东西(为了简化示例,我这里

我正在使用Symfony2和Doctrine2构建后端API。 此API将在数据库中接收要CRUD的对象图

我使用伟大的JMSSerializer包将json编码的对象图反序列化为分离的实体图,然后我想直接将该图合并到数据库中

在我的代码中,我有两个实体:父实体和子实体。父级中定义了一个
OneToMany(cascade={“all”},orphanRemoving=true)
关系

在我的数据库中,我有一个id为1的父行,它有3个id为1、2、3的子行

我想写一些类似的东西(为了简化示例,我这里不使用反序列化):

这样,我的新子项就被很好地创建了,现有子项被更新,但旧子项(1和3)不会被删除


如果我遗漏了什么,有人能帮我吗?

我们刚刚遇到了同样的问题。你解决了吗?没有,我最终手工完成了合并:迭代我现有的集合以删除或更新元素,然后添加新元素。我有点困惑。如果您
addChild()
是否也应该有一个函数
removeChild()
?这就是问题所在,我只是想表达新的状态,我想让系统计算自旧状态(删除)以来发生的变化反正我已经好几年没有做过Symfony2了,但是这个问题可能会帮助其他人,因为没有函数
removeChild()
?!但这种分离实际上发生在哪里呢?对我来说,看起来老孩子仍然是父母的财产。。。。
$parent = new Parent(); $parent->id = 1  // detached entity
$existing_child = new Child(); $child->id = 2 // detached entity
$new_child = new Child(); // new entity
$parent->addChild($existing_child);
$parent->addChild($new_child);

$em = $this->getDoctrine()
    ->getEntityManager();
$em->merge($parent);

$em->flush();