【问题标题】:Doctrine2 update relations many to many (without Symfony)Doctrine2 更新关系多对多(没有 Symfony)
【发布时间】:2016-03-08 12:23:22
【问题描述】:

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

创建一个新条目(使用数组集合)时效果很好,但是当我想编辑一个条目时 - 它会添加我选择的条目而不删除先前的选择(取消选中)。

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

  1. 删除正在更新的条目的所有联接表数据, 然后设置新数据。 (我怎样才能从连接表中删除它 不是实体?)
  2. 从第二个实体传递所有数据并删除 那些没有被检查的(看起来超级笨拙?)
  3. 我不知道的其他方式?

我没有使用 Symfony,只使用 Doctrine。

【问题讨论】:

    标签: php doctrine-orm


    【解决方案1】:

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

    在您的情况下,我会使用这种方法:在包含与第二个实体的关系的 ArrayCollection 上使用 clear 方法,并使用选中的元素再次填充它。之后,调用实体管理器的flush方法。

    另一种方法是过滤你的集合(使用 filter 方法)以获得一个全新的 ArrayCollection,它只包含被检查的元素。与第一种方法一样,将这个新集合关联到关系的 ArrayCollection 并调用实体管理器上的 flush 方法。

    【讨论】:

    • 太棒了,谢谢!不知何故,我没有想到 ArrayCollection 的方法比 "contains" 和 "toArray" = 更多)我使用了第一个解决方案,并且效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    相关资源
    最近更新 更多