Я использую Gedmo Tree для классификации объявлений.
При попытке получить родителя категории, мой запрос возвращает идентификатор корня, а не родителя.
Просто чтобы уточнить, приведенный ниже запрос возвращает все как положено, но для parent_id (p.parent) он возвращает root_id (r.root).
Вот запрос:
public function getRecentAds($em)
{
$qb = $em->createQueryBuilder();
return $qb->select('a.id, a.description')
->from('App:Ad', 'a')
->join('a.user','u')
->join('u.address', 'adr')
->addSelect('adr.city, adr.postalCode')
->join('a.category', 'c')
->addSelect('c.title')
->join('c.parent', 'p')
->addSelect('(p.parent) AS parent_id, (p.title) AS parent_title')
->join('c.root', 'r')
->addSelect('(r.root) AS root_id, (r.title) AS root_title')
->orderBy('a.id', 'DESC')
->setMaxResults(10)
->getQuery()
->getResult()
;
}
Разделы, относящиеся к субъекту категории, являются очень стандартными:
/**
* @Gedmo\TreeRoot
* @ORM\ManyToOne(targetEntity="Category")
* @ORM\JoinColumn(referencedColumnName="id", onDelete="CASCADE")
*/
private $root;
/**
* @Gedmo\TreeParent
* @ORM\ManyToOne(targetEntity="Category", inversedBy="children")
* @ORM\JoinColumn(referencedColumnName="id", onDelete="CASCADE")
*/
private $parent;
А в Ad / Entity сопоставление категорий:
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Category", inversedBy="ads")
* @ORM\JoinColumn(nullable=false)
* @Assert\NotBlank(
* message = "A category is required."* )
*/
private $category;
Задача ещё не решена.
Других решений пока нет …