我有兩個實體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