Организация ошибок в списке опций с использованием вложенного расширения дерева после обновления

У меня есть категория сущностей, и я использую расширение Tree Gedmo для управления им.

Я добавил несколько категорий родителей и их детей, и это выглядит так:

select1

Как вы видите, в категории « Человек нет» нет. Чтобы проверить, нормально ли работа обновления или нет, я установил категорию в качестве ребенка категории « Человек», но расположение списка опций становится ложным:

выбор2

Простые платья – ребенок платьев, но он отображается под Hauts , а Hauts – ребенок женщин, но, как вы видите, он отображается в категории Man .

Как я могу это решить?

Это код:

CategoryRepository

<?php namespace Project\StoreBundle\Entity; use Doctrine\ORM\EntityRepository; use Gedmo\Tree\Entity\Repository\NestedTreeRepository; /** * CategoryRepository * * This class was generated by the Doctrine ORM. Add your own custom * repository methods below. */ class CategoryRepository extends NestedTreeRepository { public function getCategories($store) { $qb = $this->createQueryBuilder('c'); $qb = $this->whereCurrentStore($qb, $store) ->leftJoin('c.children', 'child', 'WITH', 'child.parent = c'); $qb-> orderBy('c.rgt', 'DESC'); return $qb ; } public function whereCurrentStore (\Doctrine\ORM\QueryBuilder $qb, $store) { $qb->where('c.store = :store') ->setParameter('store', $store); return $qb; } public function getIndentedTitle() { return str_repeat("--", $this->lvl).$this->name; } } 

CategoryType

 <?php namespace Project\StoreBundle\Form\Type; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolverInterface; use Symfony\Component\Form\FormEvents; use Symfony\Component\Form\FormEvent; class CategoryType extends AbstractType { private $store; public function __construct($store) { $this->store = $store; } /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $store = $this->store; $builder //......... ->add('parent', 'entity', array( 'required' => false, 'label' => 'Category parent', 'class' => 'ProjectStoreBundle:Category', 'attr' => array('class' => 'col-sm-8'), 'empty_value' => 'Select one category', 'property' => 'indentedName', 'multiple' => false, 'expanded' => false , 'query_builder' => function (\Project\StoreBundle\Entity\CategoryRepository $r) use ($store) { return $r->getCategories($store); } )) ; } /** * @param OptionsResolverInterface $resolver */ public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'Project\StoreBundle\Entity\Category' )); } /** * @return string */ public function getName() { return 'project_storebundle_category'; } } 

Категория объекта

 <?php namespace Project\StoreBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Gedmo\Mapping\Annotation as Gedmo; use Doctrine\Common\Collections\ArrayCollection; use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; use Symfony\Component\Validator\Constraints as Assert; /** * Category * @Gedmo\Tree(type="nested") * @ORM\Table() * @ORM\Entity(repositoryClass="Project\StoreBundle\Entity\CategoryRepository") * @ORM\HasLifeCycleCallbacks() */ class Category { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string * * @ORM\Column(name="name", type="string", length=255) * *@Assert\NotBlank(message="Please enter the name of categorie.") */ private $name; //..... /** * @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; /** *non mapped property */ private $indentedName; /** * @ORM\ManyToOne(targetEntity="Project\StoreBundle\Entity\Store", inversedBy="categories", cascade={"persist"}) * @ORM\JoinColumn(nullable=false) */ private $store ; /** * Constructor */ public function __construct() { $this->children = new ArrayCollection(); } /** * Get IndentedName * */ public function getIndentedName() { return str_repeat("-----", $this->lvl).$this->name; } //......... }