我有一个Product
和一个Category
实体。
Category
实体是邻接列表/物化路径模型。
Product
与Category
有关系,其关系可以追溯到Product
在我的ProductType
课程中,我想要一个选择菜单,其中所有类别都按照父母名称分组。
$builder->add('category', 'entity', array(
'label' => 'Category',
'class' => 'Test\AdminBundle\Entity\Category',
'property' => 'name',
'group_by' => 'parentName',
'query_builder' => function(\Doctrine\ORM\EntityRepository $er) {
$qb = $er->createQueryBuilder('c');
return $qb->where($qb->expr()->like('c.path', ':path'))
->orderBy('c.path', 'ASC')
->setParameter('path', '%/%/%');
},
));
Category
获得getParentName
方法:
public function getParentName()
{
if (null === $this->getParent()) {
return null;
}
return $this->getParent()->getName();
}
它按预期工作,但是为每个父级(很多)执行查询。如果我与父母一起加入,父母也可以在我不想要的选择菜单中选择。
如何限制查询?
或过滤联接的结果?
答案 0 :(得分:0)
我没有fetchjoining ...向querybuilder添加一个select使其工作:
$qb = $er->createQueryBuilder('c');
return $qb->select('c, p')
->leftJoin('c.parent', 'p')
->where($qb->expr()->like('c.path', ':path'))
->orderBy('c.path', 'ASC')
->setParameter('path', '%/%/%');