2013-11-20 68 views
3

Doctrine 2 Documentation成解釋持有端和反向端成多對多關係,並表示:Symfony 2 Doctrine 2使用inversedBy和mappedBy轉換爲ManyToMany關係?

對於多對多雙向關係任一側可以是定義了@JoinTable和/或不使 的 擁有側(側使用mappedBy屬性,從而使用默認連接表)。

是意味着我可以寫我的註釋,而無需使用inversedBy和的mappedBy 要引用爲擁有多對多關係多對多關係和翻轉邊的一面呢?

例:

我可以寫:

加盟實體

/** 
    * @var \Doctrine\Common\Collections\Collection 
    * 
    * @ORM\ManyToMany(targetEntity="Category") 
    *  
    */   
    private $categories; 

類別實體

/** 
* @var \Doctrine\Common\Collections\Collection 
* 
* @ORM\ManyToMany(targetEntity="Affiliate") 
* @ORM\JoinTable(name="category_affiliate") 
*  
*/ 
private $afflitiates; 

,而不是寫的是:

加盟實體

/** 
    * @var \Doctrine\Common\Collections\Collection 
    * 
    * @ORM\ManyToMany(targetEntity="Category", mappedBy="afflitiates") 
    *  
    */   
    private $categories; 

類別實體

/** 
* @var \Doctrine\Common\Collections\Collection 
* 
* @ORM\ManyToMany(targetEntity="Affiliate",inversedBy="categories") 
* @ORM\JoinTable(name="category_affiliate") 
*  
*/ 
private $afflitiates; 
+3

你爲什麼不試試呢? ;)小提示:具有'@ORM \ JoinTable'的那一邊自動是*擁有*邊......所以它不可能讓Doctrine決定擁有者而不需要'inversedBy'屬性,對嗎? – nifr

+0

我曾試過,我注意到:這兩種方法是正確的 –

回答

3

櫃面的多對多的關係,你可以選擇任何一方作爲你自己的一方,另一方自動變成反轉方。但嘗試檢查哪一個實體,你將頻繁觸發,以獲得對象和管理您的擁有方

0

我總結作爲答案的問題:

(1)首先,確定擁有方。例如,類別實體擁有/ map側,因此InverseBy這個$ category + JoinTable

(2)因此,聯屬實體是反面,因此MappedBy這個$子公司。

的另一種方法:

(1)InversedBy(2)使用(1A)+ JointTable

(2)的mappedBy(1)使用(2A)

它是字眼混淆我們。

D.