Symfony2(Doctrine):使用M:M关系添加不存在的行

时间:2013-02-16 10:06:05

标签: php symfony doctrine-orm

我有两个实体E1& E2具有ManyToMany关系和链接表。一切都很好,直到我尝试添加到不存在的E2的E1元素。例如,E2是Tag实体。用户通过表单放置几个标签。如何在将它们保存到E1之前在E2中添加不存在的标签?

更新

好的,我根据@Axxiss的答案更新了我的实体。它 自动保留新标签,但它也会再次保留旧标签。我想知道的是,如果我有一个名为'tag1'的标签,则不应再在标签表中添加。

2 个答案:

答案 0 :(得分:1)

您需要在E1内的标记字段中添加cascade注释。

在E1中你会有这样的东西:

/**
 * @ORM\ManyToMany(targetEntity="Tag", cascade={"persist"})
 * @ORM\JoinTable(name="e1_has_tags",
 *      joinColumns={@ORM\JoinColumn(name="e1_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
 *      )
 **/
private $tags;

检查Transitive persistence / Cascade Operations

如果您只想添加一个标签,则有两个选项:

  1. 在持久化实体之前在控制器上执行此操作
  2. 直接在实体上执行
  3. 在这两种情况下,您需要按标签名称进行查询,如果标签已存在,则将其替换为找到的标签。

答案 1 :(得分:1)

如果你想要唯一标签,你需要在坚持之前检查它们是否存在。