2016-02-20 2 views
0

Я хочу создать навигационную панель на своем веб-сайте.Рекурсивная сущность Doctrine

У меня есть таблица таблицы SQL. Меню может иметь детское меню и т. Д.

CREATE TABLE IF NOT EXISTS MENU 
(
    menu_Id INT AUTO_INCREMENT NOT NULL, 
    nom VARCHAR(100) NOT NULL, 
    route VARCHAR(255) NOT NULL, 
    parent INT NULL, 
    CONSTRAINT pk_MENU PRIMARY KEY (menu_Id), 
    CONSTRAINT fk_MENU_MENU FOREIGN KEY (parent) REFERENCES MENU(menu_Id) 
); 

И у меня есть класс в моем проекте symfony в папке Entity.

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 

/** 
* @ORM\Entity 
* @ORM\Table(name="menu") 
*/ 
class Menu 
{ 
    /** 
    * @ORM\Column(name="menu_Id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(name="nom", type="string", length=100) 
    */ 
    protected $lib; 

    /** 
    * @ORM\Column(type="string", length=100) 
    */ 
    protected $route; 

    /** 
    * @ORM\OneToMany(targetEntity="Menu", mappedBy="parent") 
    */ 
    protected $listeSousMenus; 

    //... GETTERS AND SETTERS ... 
} 

Когда я отображение страницы, у меня есть эта ошибка:

Исключение было брошено во время рендеринга шаблона («Извещение: Undefined индекс: родительский») в bandeau.html.twig на линии 23.

Как я могу решить эту ошибку? Как я могу реализовать свое меню с рекурсивными дочерними элементами?

+0

Что ваш вопрос? http://stackoverflow.com/help/how-to-ask – 1ed

+0

Как я могу решить эту ошибку? Как я могу реализовать свое меню с рекурсивными дочерними элементами? –

ответ

4

Ошибка объясняется: где ваше родительское поле?

Вам нужно добавить родительское свойство:

/** 
* @ORM\ManyToOne(targetEntity="Menu", inversedBy="listeSousMenus") 
* @ORM\JoinColumn(name="parent", referencedColumnName="menu_Id") 
*/ 
protected $parent; 

Посмотрите этот пример в документации: http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-many-self-referencing

<?php 
/** @Entity */ 
class Category 
{ 
    // ... 
    /** 
    * @OneToMany(targetEntity="Category", mappedBy="parent") 
    */ 
    private $children; 

    /** 
    * @ManyToOne(targetEntity="Category", inversedBy="children") 
    * @JoinColumn(name="parent_id", referencedColumnName="id") 
    */ 
    private $parent; 
    // ... 

    public function __construct() { 
     $this->children = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 
} 
Смежные вопросы