【问题标题】:Symfony 2 Doctrine 2 using inversedBy and mappedBy into ManyToMany Relationship?Symfony 2 Doctrine 2 使用 inversedBy 和 mappedBy 到多对多关系?
【发布时间】:2013-12-04 18:50:01
【问题描述】:

Doctrine 2 Documentation解释Owning Side和Inverse Side成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;

【问题讨论】:

  • 你为什么不试试看呢? ;) 小提示:拥有@ORM\JoinTable 的一方自动成为拥有 方......所以Doctrine 无需inversedBy 属性就可以确定拥有方,对吧?
  • 我试过了,我注意到:这两种方法都是正确的

标签: php symfony doctrine-orm doctrine symfony-2.3


【解决方案1】:

在多对多关系的情况下,您可以选择任何一方作为您的拥有方,另一方自动变为反方。但是请尝试检查您将经常触发哪个实体来获取对象并管理您拥有的一方

【讨论】:

    【解决方案2】:

    我的总结作为对问题的回答:

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

    (2) 因此 Affiliate 实体是反面,因此 MappedBy 这个 $affiliate。

    另一种方式:

    (1) InversedBy (2) using (1a) + JointTable

    (2) MappedBy (1) 使用 (2a)

    这是让我们困惑的措辞。

    D.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多