我有两个实体E1 & E2与ManyToMany关系和链接表为它。一切都很好,直到我试图添加到E2不存在的E1元素。例如,E2是标记实体。用户通过表单放置几个标签。 E2中如何在E2中添加不存在的标签?Symfony2(Doctrine):添加与M:M关系不存在的行
UPDATE:
好啦,我已经根据@Axxiss答案更新我的实体。它确实自动保留新标签,但它也会保留旧标签。我所要做的就是如果我有一个名称为'tag1'的标签,它不应该再次添加到标签表中。
我有两个实体E1 & E2与ManyToMany关系和链接表为它。一切都很好,直到我试图添加到E2不存在的E1元素。例如,E2是标记实体。用户通过表单放置几个标签。 E2中如何在E2中添加不存在的标签?Symfony2(Doctrine):添加与M:M关系不存在的行
UPDATE:
好啦,我已经根据@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;
检查Transitive persistence/Cascade Operations
如果你想添加一个标签只有一个时间,你有两种选择:
在这两种情况下,您都需要通过标签名称进行查询,如果标签已经存在,请将其替换为找到的标签。
如果你想要独特的标签,你需要检查它们是否存在之前坚持他们。
好吧,我将通过dataTransformer将字符串'tag1,tag2,tag3'转换为Tag对象的ArrayCollection。我应该在哪里放置检查存在标签的查询?在其他地方的数据转换器本身? – Hast 2013-02-18 08:23:05
放置查询的最佳位置是在Repository类中 – 2013-02-18 16:39:51
“不存在”是什么意思?你的意思是它已经创建但尚未被保存? – 2013-02-16 12:49:58