Symfony 2 Doctrine 2使用inversedBy和mappedBy来构建ManyToMany关系?

3

请进入Doctrine 2 文档,解释了 ManyToMany 关系中的 Owning Side 和 Inverse Side,并且指出:

对于 ManyToMany 双向关系,任何一侧都可以是 Owning Side(定义 @JoinTable 和/或不使用 mappedBy 属性)。

这是否意味着我可以编写注释而不使用 inversedBy 和 mappedBy 来引用 ManyToMany 关系的 Owning Side 和 Inverse Side?

例如:

Affiliate 实体

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

and

Category Entity

/**
 * @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;

and

Category Entity

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

3
你为什么不试一下呢? ;) 小提示:带有 @ORM\JoinTable 的一侧自动成为拥有方,因此Doctrine可以在不需要 inversedBy 属性的情况下确定拥有方,对吗? - Nicolai Fröhlich
我已经尝试过并且注意到:这两种方法都是正确的。 - ahmed hamdy
2个回答

3

对于多对多关系,您可以选择任何一侧作为拥有方,另一侧自动成为反向方。但请注意检查哪个实体经常触发以获取对象并管理您的拥有方。


0

我的回答总结:

(1) 首先,确定拥有方。例如,Category实体是拥有/映射方,因此通过InverseBy $category + JoinTable来实现。

(2) 因此,Affiliate实体是反向方,因此通过MappedBy $affiliate来实现。

另一种方式:

(1) 使用(1a) + JointTable来实现InversedBy (2)

(2) 使用(2a)来实现MappedBy (1)

这些措辞让我们感到困惑。

D.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接