2015-11-05 67 views
2

我的表單中有一個實體字段,它顯示數據庫中列表中的所有表單。這些表格有版本號。我想要做的只是在列表中只顯示錶單的最後一個修訂版本作爲選項。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 

回答

2

我也遇到過這個問題。

'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