同一桌子上的多对一关系子页面/页面?

时间:2011-03-14 03:22:56

标签: entity-relationship foreign-key-relationship doctrine-orm

使用ZF和Doctrine。我有一张桌子'页'。我想拥有它,以便某些页面可以有与之关联的子页面。子页面还应该引用它们(唯一的)父页面。

我知道我可以在2个实体(页面/子页面)之间进行拆分,但我知道可以使用一个实体,但无法弄清楚如何使关系有效。

我调查它的方式是第二个表是映射表(page_id,parent_page_id)。

我在我的实体中使用注释引用,这是我到目前为止所做的事情,在深夜的紧缩中,任何帮助都会受到赞赏。

    /**
 * @OneToMany(targetEntity="Page", mappedBy="parentPage")
 */
private $subPages;


/**
 * @ManyToOne(targetEntity="Page", inversedBy="subPages")
 */
private $parentPage;

1 个答案:

答案 0 :(得分:0)

此问题的答案在教义文档中的一对多自引用下:

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

这里是一个例子:

class Pages{
    /**
    * @ORM\Id
    * @ORM\Column(type="integer")
    * @ORM\GeneratedValue(strategy="AUTO")
    */
    protected $id;

    /**
     * one page have several referred pages
     * @var Collection
     * @ORM\OneToMany(targetEntity="Pages", mappedBy="parentPage")
     */
    private $subPages;

    /**
     * many referred pages have one referral page
     * @ORM\ManyToOne(targetEntity="Pages", inversedBy="subPages")
     * @ORM\JoinColumn(name="parent_page", referencedColumnName="id")
     */
    private $parentPage;
    private $referredBy;



    public function __construct()
    {
        $this->subPages = new Doctrine\Common\Collections\ArrayCollection();
    }
}