Doctrine2更新关系多对多(没有Symfony)

时间:2016-03-08 12:23:23

标签: php doctrine-orm

我有2个具有多对多关系的学说实体。当我编辑第一个实体时,我希望能够选择具有第二个实体的数据的复选框,以便为特定条目建立连接。

它在创建新条目(使用数组集合)时工作正常,但是当我想编辑条目时 - 它会添加我选择的条目而不删除先前的选择(取消选中)。

哪种方式是正确的方法,以及如何做到这一点?

  1. 删除正在更新的条目的所有联接表数据, 然后设置新数据。 (如何从连接表中删除它 不是实体吗?)
  2. 传递第二个实体的所有数据并删除 那些未经检查的(看起来超级笨拙?)
  3. 我不知道的其他方式?
  4. 我没有使用Symfony,只是Doctrine。

1 个答案:

答案 0 :(得分:1)

Doctrine使得与多对多关联的合作变得非常容易。您的关联存储在ArrayCollection类中,该类具有一些可以帮助您的方法。首先,检查ArrayCollection here (Doctrine API - ArrayCollection)

的所有可用方法

在您的情况下,我将使用此方法:在ArrayCollection上使用clear方法,该方法包含与第二个实体的关系,并使用checked元素再次填充它。在此之后,在entitymanager上调用flush方法。

另一种方法是过滤您的集合(使用过滤器方法)以获取仅包含已检查元素的全新ArrayCollection。与第一种方法一样,将此新集合与关系的ArrayCollection关联,并在entitymanager上调用flush方法。