Symfony2表单选择字段

时间:2013-05-14 12:32:04

标签: symfony doctrine-orm

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

Category实体是邻接列表/物化路径模型。

ProductCategory有关系,其关系可以追溯到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();
}

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

如何限制查询?

或过滤联接的结果?

1 个答案:

答案 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', '%/%/%');