0

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

更新:

好的,我已经根据@Axxiss 的回答更新了我的实体。它确实会自动保留新标签,但它也会再次保留旧标签。我想要的是,如果我有一个名为“tag1”的标签,则不应再次将其添加到标签表中。

4

2 回答 2

1

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

在 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;

检查传递持久性/级联操作

如果您只想添加一次标签,您有两种选择:

  1. 在持久化实体之前在控制器上执行此操作
  2. 直接在实体上做

在这两种情况下,您都需要通过标签名称进行查询,如果标签已经存在,请将其替换为找到的标签。

于 2013-02-17T09:51:40.993 回答
1

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

于 2013-02-18T05:00:18.133 回答