Отношение «многие к одному» на одной странице / странице в одной таблице? - PullRequest
1 голос
/ 14 марта 2011

Использование ZF и Doctrine. У меня есть таблица «страниц». Я хочу, чтобы некоторые страницы могли иметь подстраницы, связанные с ним. Подстраницы также должны иметь ссылку на свою (одну и единственную) родительскую страницу.

Я знаю, что могу разделить это на две сущности (страница / подстраница), но я знаю, что это возможно с одной сущностью, но не могу понять, как заставить отношения работать.

Как я понимаю, вторая таблица будет таблицей сопоставления (page_id, parent_page_id).

Я использую ссылку на аннотацию в своих сущностях, и вот что я делаю до сих пор, любая помощь будет признательна в позднем ночном кризисе.

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


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

1 Ответ

0 голосов
/ 01 ноября 2018

Ответ на этот вопрос находится здесь, в документации Доктрины, под Один-ко-многим, Самостоятельная ссылка :

https://www.doctrine -project.org / projects / doctrine-orm / en / latest / reference / association-mapping.html # один-ко-многим-сам-ссылающийся

Вот пример:

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();
    }
}
...