Query_builder Symfony表单生成器错误
问题描述:
我的表单中有一个实体字段,它显示数据库中列表中的所有表单。这些表格有版本号。我想要做的只是在列表中只显示表单的最后一个修订版本作为选项。Query_builder Symfony表单生成器错误
为了澄清,形式表看起来像这样
Id || Name || Revision_number
1 || Form1 || 1
2 || Form1 || 2
选择列表只显示修改2.
到目前为止,我已经试过这
->add('form', 'entity', array(
'class' => 'AppBundle\Entity\Form',
'label' => 'label.ship.form',
'query_builder' => function(EntityRepository $er){
return $er->createQueryBuilder('f')
->select('f, MAX(f.revisionNumber) AS max_revision');
}
))
,但我得到此错误
Warning: spl_object_hash() expects parameter 1 to be object, string given
答
我也遇到过这个问题。
'query_builder'选项应该返回Doctrine \ ORM \ QueryBuilder或一个Closure,在你的情况下(如果我错了,有人纠正我)“select”方法应该返回一个Doctrine \ ORM \ QueryBuilder对象。奇怪了吧......
我所做的就是创建一个返回查询生成器本身的实体仓库里的方法:
public function generateStaffRolesQB() {
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('r')
->from('DatabaseModelsBundle:Role', 'r')
->where('r.id IN (1, 2)');
return $qb;
}
并在窗体我用这样的:
'query_builder' => function(EntityRepository $er) {
return $er->generateStaffRolesQB();
},
希望它有帮助。
永远不会在一百万年中想到这一点。它像一个魅力。非常感谢! – Jaimy
实际上,您可能根本不需要存储库解决方法。这应该工作: 'query_builder'=> function(EntityRepository $ er){err-> createQueryBuilder('f'); $ er-> select('f,MAX(f.revisionNumber)AS max_revision'); return $ er; } –
我必须将代码稍微更改为这个 $ er-> createQueryBuilder('f') - > select('f,MAX(f.revisionNumber)AS max_revision'); return $ er; 但现在我得到这个错误:给定类型“Doctrine \ ORM \ QueryBuilder”,“Doctrine \ ORM \ EntityRepository”的预期参数 – Jaimy