2013-02-16 49 views
0

我有兩個實體E1 & E2與ManyToMany關係和鏈接表爲它。一切都很好,直到我試圖添加到E2不存在的E1元素。例如,E2是標記實體。用戶通過表單放置幾個標籤。 E2中如何在E2中添加不存在的標籤?Symfony2(Doctrine):添加與M:M關係不存在的行

UPDATE:

好啦,我已經根據@Axxiss答案更新我的實體。它確實自動保留新標籤,但它也會保留舊標籤。我所要做的就是如果我有一個名稱爲'tag1'的標籤,它不應該再次添加到標籤表中。

+0

「不存在」是什麼意思?你的意思是它已經創建但尚未被保存? – 2013-02-16 12:49:58

回答

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; 

檢查Transitive persistence/Cascade Operations

如果你想添加一個標籤只有一個時間,你有兩種選擇:

  1. 上做吧控制器在堅持實體之前
  2. 直接在實體上執行

在這兩種情況下,您都需要通過標籤名稱進行查詢,如果標籤已經存在,請將其替換爲找到的標籤。

+0

好吧,它現在堅持新的標籤。但它堅持了很多次。我已經更新了我的問題,請看看它。 – Hast 2013-02-17 22:18:56

+0

而且您錯過了'JoinColumn'中的兩個右括號:) – Hast 2013-02-17 22:20:11

+0

括號修正,並添加了獨特的標記響應 - – Axxiss 2013-02-18 17:54:16

1

如果你想要獨特的標籤,你需要檢查它們是否存在之前堅持他們。

+0

好吧,我將通過dataTransformer將字符串'tag1,tag2,tag3'轉換爲Tag對象的ArrayCollection。我應該在哪裏放置檢查存在標籤的查詢?在其他地方的數據轉換器本身? – Hast 2013-02-18 08:23:05

+0

放置查詢的最佳位置是在Repository類中 – 2013-02-18 16:39:51