我是Symfony2查询构建器的新手,这是我的工作:
$builder
->add('access', 'entity', array(
'label' => 'Behörigheter',
'multiple' => true, // Multiple selection allowed
'expanded' => true, // Render as checkboxes
'property' => 'name', // Assuming that the entity has a "name" property
'class' => 'BizTV\ContainerManagementBundle\Entity\Container',
'query_builder' => function(\Doctrine\ORM\EntityRepository $er) use ($company) {
$qb = $er->createQueryBuilder('a');
$qb->where('a.containerType IN (:containers)', 'a.company = :company');
$qb->setParameters( array('containers' => array(1,2,3,4), 'company' => $company) );
return $qb;
}
));
除了我想按containerType(这是一个关系字段,FK)对我的实体进行排序之外,它工作正常。
当我添加此行时:
$qb->orderBy('a.containerType', 'ASC');
我收到错误:无效的PathExpression。必须是StateFieldPathExpression。
那是什么-我可以在where子句中使用关系字段containerType,但不能在sort子句中使用关系字段containerType?还是我想念其他东西?
最佳答案
'query_builder' => function(\Doctrine\ORM\EntityRepository $er) use ($company) {
$qb = $er->createQueryBuilder('a');
$qb->innerJoin('a.containerType', 'ct');
$qb->where('a.containerType IN (:containers)', 'a.company = :company');
$qb->orderBy('ct.id', 'ASC'); // Or the field you want from containerType
$qb->setParameters( array('containers' => array(1,2,3,4), 'company' => $company));
return $qb;
}
您不能将containerType与sort子句一起使用,因为这是与当前实体有关的一个实体!
查询生成器不知道要使用的字段(即使containerType代表实体的ID!)。
因此,您需要加入实体并手动按其字段排序!