0

我有一个Product和一个Category实体。

Categoryentity 是一个邻接列表/物化路径模型。

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();
}

它按预期工作,但会为每个父母(很多)执行一个查询。如果我与父母一起加入,父母也可以在我不想要的选择菜单中选择。

如何限制查询?

或者过滤一个连接的结果?

4

1 回答 1

0

我没有 fetchjoining ......向查询构建器添加一个选择使其工作:

$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', '%/%/%');
于 2013-05-14T18:46:20.037 回答