我正在使用Gedmo树对广告进行分类。
当尝试检索类别的父级时,我的查询返回的是根级ID,而不是父级。
为澄清起见,下面的查询将按预期返回所有内容,但对于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;
在广告/实体上,类别映射为:
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Category", inversedBy="ads")
* @ORM\JoinColumn(nullable=false)
* @Assert\NotBlank(
* message = "A category is required."
* )
*/
private $category;