【问题标题】:Add ArrayCollection of Entities in the same entity type添加相同实体类型的实体的ArrayCollection
【发布时间】:2017-05-12 12:32:25
【问题描述】:

是否可以在实体 A 中保留一组实体 A ?如何用 Doctrine 做到这一点?

我有:

class A {
   /**
     * @var \Doctrine\Common\Collections\ArrayCollection
     */
    private $sisters;
}

但我不知道要添加什么才能让 Doctrine 满足我的需要。

【问题讨论】:

  • 你能解释更多你的问题吗? “在实体 A 中保留一组实体 A”是什么意思??
  • 这是我的问题的一部分,我找不到可以解释的词:(在我的“示例”中,我希望姐妹成为 A 类型的 arrayCollection
  • 例如我自己的姐妹不能是你的姐妹,所以关系应该是一对多关系,我认为我的解决方案是正确的!!!
  • OneToMany 不起作用,想象以下场景,ABC 姐妹,​​当您添加 BC 作为 A 的姐妹时,使用 OneToMany您将A 设置为BC 的父级(这不是真实的),然后BC 有一个名为parent_sister 的字段和A。现在尝试将C 添加为B 的姐妹,您将覆盖Cparent_sister 并设置B,那么C 不是A 的姐妹吗?想想在现实世界中,一个姐妹不是另一个姐妹的父母,了解姐妹的唯一方法是知道每个姐妹的共同父母,然后 joinTable 充当记录了解姐妹的关系。

标签: symfony doctrine symfony-2.8


【解决方案1】:

A可以有很多姐妹,很多姐妹可以是A的姐妹(多对多,自引用):

/**
 * @ORM\Entity()
 * @ORM\Table()
 */
class A
{
    /**
     * @var integer
     *
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    protected $id;

    /**
     * @var \Doctrine\Common\Collections\ArrayCollection
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\A")
     */
    private $sisters;
}

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-many-self-referencing

【讨论】:

  • 我认为我自己的姐妹不可能是你的姐妹,这就是为什么关系应该是一对多关系,认为我的解决方案是正确的!!!
  • OneToMany 不起作用,想象以下场景,ABC 姐妹,​​当您将 BC 添加为 A 的姐妹时,使用 OneToMany您将A 设置为BC 的父级(这不是真实的),然后BC 有一个名为parent_sister 的字段和A。现在尝试将C 添加为B 的姐妹,您将覆盖Cparent_sister 并设置B,那么C 不是A 的姐妹吗?想想在现实世界中,一个姐妹不是另一个姐妹的父母,了解姐妹的唯一方法是知道每个姐妹的共同父母,然后 joinTable 充当记录了解姐妹的关系。
猜你喜欢
  • 1970-01-01
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 2014-07-18
相关资源
最近更新 更多