2013-11-20 67 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.