我有一个Product
和一个Category
实体。
Category
entity 是一个邻接列表/物化路径模型。
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();
}
它按预期工作,但会为每个父母(很多)执行一个查询。如果我与父母一起加入,父母也可以在我不想要的选择菜单中选择。
如何限制查询?
或者过滤一个连接的结果?