@Roman-G

Как использовать Tree в Doctrine2 behavioral extensions?

Не получается настроить работу с библиотекой Doctrine2 behavioral extensions.
А именно нужен функционал Tree.

Ошибка:
Fatal error: Uncaught exception 'Doctrine\Common\Annotations\AnnotationException' with message '[Semantical Error] The annotation "@Entity" in class Tree was never imported. Did you maybe forget to add a "use" statement for this annotation?' in C:\OpenServer\domains\doctrine\vendor\doctrine\annotations\lib\Doctrine\Common\Annotations\AnnotationException.php on line 54

Bootstrap.php
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;

require_once "vendor/autoload.php";

$entityPath = array('src');

$isDevMode = true;

$config = Setup::createAnnotationMetadataConfiguration($entityPath, $isDevMode);

$databaseParameters = array('driver' => 'pdo_mysql', 
                            'user' => 'root', 
                            'password' => '', 
                            'dbname' => 'doctrine');

$entityManager = EntityManager::create($databaseParameters, $config);


/src/Tree.php
<?php

/**
 * @Entity(repositoryClass="TreeRepository") 
 * @Table(name="Tree")
 */
class Tree {
  
  /**
   * @Id @GeneratedValue @Column(type="integer")
   * 
   * @var int
   */
  private $id;
  
  public function getId() {
    return $this->id;
  }
}


/src/TreeRepository.php
<?php

use Gedmo\Tree\Entity\Repository\NestedTreeRepository;

class TreeRepository extends NestedTreeRepository
{
}


tree.php
require_once 'bootstrap.php';

$treeListener = new Gedmo\Tree\TreeListener();

$entityManager->getEventManager()->addEventSubscriber($treeListener);

$repository = $entityManager->getRepository('Tree');

$subNode = $repository->findOneByTitle('root');

$path = $repository->getPath($subNode);


В чем заключается ошибка? Кучу времени потратил на решение, так и не разобрался.
  • Вопрос задан
  • 1230 просмотров
Решения вопроса 1
magalex
@magalex
Архитектор распределённых систем управления
Надо добавить use и обязательные поля, помеченные как TreeLeft, TreeRight, TreeLevel и т.д.
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;

/**
 * @Gedmo\Tree(type="nested")
 * @ORM\Table(name="Tree")
 * @ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository")
 */
class Tree
{
    /**
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue
     */
    private $id;

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

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

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

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

    /**
     * @Gedmo\TreeParent
     * @ORM\ManyToOne(targetEntity="Category", inversedBy="children")
     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="CASCADE")
     */
    private $parent;

    /**
     * @ORM\OneToMany(targetEntity="Category", mappedBy="parent")
     * @ORM\OrderBy({"lft" = "ASC"})
     */
    private $children;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы