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

希望它有帮助。

+0

永远不会在一百万年中想到这一点。它像一个魅力。非常感谢! – Jaimy

+0

实际上,您可能根本不需要存储库解决方法。这应该工作: 'query_builder'=> function(EntityRepository $ er){err-> createQueryBuilder('f'); $ er-> select('f,MAX(f.revisionNumber)AS max_revision'); return $ er; } –

+0

我必须将代码稍微更改为这个 $ er-> createQueryBuilder('f') - > select('f,MAX(f.revisionNumber)AS max_revision'); return $ er; 但现在我得到这个错误:给定类型“Doctrine \ ORM \ QueryBuilder”,“Doctrine \ ORM \ EntityRepository”的预期参数 – Jaimy