我有两个实体 E1 和 E2 与 ManyToMany 关系和它的链接表。一切都很好,直到我尝试添加不存在的 E2 的 E1 元素。例如,E2 是标签实体。用户通过表单放置几个标签。如何在 E2 中添加不存在的标签,然后再将它们持久化到 E1?
更新:
好的,我已经根据@Axxiss 的回答更新了我的实体。它确实会自动保留新标签,但它也会再次保留旧标签。我想要的是,如果我有一个名为“tag1”的标签,则不应再次将其添加到标签表中。
我有两个实体 E1 和 E2 与 ManyToMany 关系和它的链接表。一切都很好,直到我尝试添加不存在的 E2 的 E1 元素。例如,E2 是标签实体。用户通过表单放置几个标签。如何在 E2 中添加不存在的标签,然后再将它们持久化到 E1?
更新:
好的,我已经根据@Axxiss 的回答更新了我的实体。它确实会自动保留新标签,但它也会再次保留旧标签。我想要的是,如果我有一个名为“tag1”的标签,则不应再次将其添加到标签表中。
您需要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;
如果您只想添加一次标签,您有两种选择:
在这两种情况下,您都需要通过标签名称进行查询,如果标签已经存在,请将其替换为找到的标签。
如果你想要唯一的标签,你需要在持久化它们之前检查它们是否存在。