Bonjour,

Je viens vous demander votre aide sur un problème dont je ne comprend pas les raisons.Bien que novice sur Symfony2 , j'ai voulu créer mon admin perso pour d'une part maitriser mon code et surtout mieux connaitre Symfony.

J'ai donc décider de commencer par mon menu et le breadcrumb mais la je rencontre un problème sur une Entity.

J'ai bien essayé de trouver la raison à l'aide d'internet ou autre mais la je suis perdu.

J'ai une Entity Menu qui me permettra à l'aide de nestedset et de Tree Extension Doctrine et knpMenuBundle de créer mon arborescence ainsi que mon breadcrumb.

Donc à l'aide de la doc des deux j'ai réussie à le faire fonctionné mais j'ai remarquer une erreur sur mon arborescence car cela me l'affichai mais pas dans l'ordre donc j'ai chercher et trouver la raison qui est de la commande lorsque que je génère ma table à l'aide de l'Entity.

Mon Entity :

<?php
namespace Waldo\DemoMenuBundle\Entity;

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

/**
 * Menu
 *
 * @Gedmo\Tree(type="nested")
 * @ORM\Table(name="Menu")
 * use repository for handy tree functions
 * @ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository")
 */
class Menu
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string $name
     * @ORM\Column(name="name", type="string", length=255, nullable=false)
     */
    private $name;

    /**
     * @var text $description
     * @ORM\Column(name="description", type="text", nullable=true)
     */
    private $description;

    /**
     * @Gedmo\TreeLeft
     * @ORM\Column(name="lft", type="integer", nullable=true)
     */
    private $lft;

    /**
     * @Gedmo\TreeLevel
     * @ORM\Column(name="lvl", type="integer", nullable=true)
     */
    private $lvl;

    /**
     * @Gedmo\TreeRight
     * @ORM\Column(name="rgt", type="integer", nullable=true)
     */
    private $rgt;

    /**
     * @Gedmo\TreeRoot
     * @ORM\Column(name="root", type="integer", nullable=true)
     */
    private $root;

    /**
     * @Gedmo\TreeParent
     * @ORM\ManyToOne(targetEntity="Menu", inversedBy="children")
     */
    private $parent;

    /**
     * @ORM\OneToMany(targetEntity="Menu", mappedBy="parent")
     * @ORM\OrderBy({"lft" = "ASC"})
     */
    private $children;

    /**
     * Constructor && getter setter
     */
    .....
}

?>

Lorsque je lance la commande pour générer ma table j'ai remarquer que les champs créer ne sont pas les même que les champs dans mon Entity Menu.

requète générer par :

CREATE TABLE Menu (
id INT AUTO_INCREMENT NOT NULL,
parent_id INT DEFAULT NULL, // ici parent_id au lieu de parent
name VARCHAR(255) NOT NULL,
description LONGTEXT DEFAULT NULL,
lft INT DEFAULT NULL,
lvl INT DEFAULT NULL,
rgt INT DEFAULT NULL,
root INT DEFAULT NULL,
// ici il manque children
INDEX IDX_DD3795AD727ACA70 (parent_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLA
TE utf8_unicode_ci ENGINE = InnoDB;
ALTER TABLE Menu ADD CONSTRAINT FK_DD3795AD727ACA70 FOREIGN KEY (parent_id) REFE
RENCES Menu (id);

Je bloc réellement et j'aurais aimer savoir si quelqu'un peut m'aider à comprendre :).

Je le remercie par avance.

1 réponse


Déterrage de topic XD
En fait je crois que le problème vient de tes liaisons avec les tables. Tu as parent_id parce que tu as la relation vers une autre table. Ensuite tu n'as pas children parce que ça n'est point une colonne si je ne m'abuse, elle est mapped sur parent.

Voilà voilà si je raconte des conneries, arrêtez moi XD