我想創建一個窗體與數據集合類型取決於正在登錄的用戶。我正在關注this chapter of the Symfony cookbook。Symfony表單query_buider和實體存儲庫
當query_builder
選項是我從DQL獲取數據的閉包時,一切正常。由於數據需要從代碼中的不同位置獲取,因此我希望在Repository類中定義查詢。
這裏是我的倉庫的功能:在控制器調用,並返回第一個數組時
public function findOwnedBy($user) {
$query = $this->getEntityManager()->createQuery("SELECT l FROM MyBundle:Article a JOIN a.owndBy u WHERE u.id = :userId");
$query->setParameters(array("userId"=>$user->getId()));
return $query->getResult();
}
此功能。下面是symfony的文檔的一個片段:
$formOptions = array(
'class' => 'Acme\DemoBundle\Entity\User',
'multiple' => false,
'expanded' => false,
'property' => 'fullName',
'query_builder' => function(EntityRepository $er) use ($user) {
// build a custom query, or call a method on your repository (even better!)
},
);
當我把電話給我在query_builder庫函數,我得到一個錯誤:Expected argument of type "Doctrine\ORM\QueryBuilder", "array" given
,這我能理解,因爲我的倉庫返回實體的數組,而不是一個QueryBuilder。
我不想重複代碼並在窗體中創建一個新的QueryBuilder。從Repository使用查詢的最佳實踐是什麼?我想在倉庫中有兩個函數,一個返回一個數組,另一個返回QueryBuilder,但在Symfony文檔中的註釋「」或調用倉庫中的一個方法(甚至更好!)「讓我覺得有更好的方法對於這種情況。
我也雖然它應該很容易,這是我的第一次嘗試。這會返回錯誤'預期參數的類型「Doctrine \ ORM \ QueryBuilder」,「array」given'。看起來'query_builder'需要一個QueryBuilder對象,不管它是直接給出的還是由閉包返回的。 – Florent
編輯帖子。創建兩個函數,在該函數上返回查詢,另一個函數返回結果。在表單構建器上調用返回查詢的函數。這應該工作,仍然是乾的。對不起,我會更改名稱,因爲它們不合適。 – saamorim
呵呵,這的確是我所做的和我在問題的最後一段中描述的。我會這麼做,Symfony的文檔中的小評論讓我們認爲它可以開箱即用,這很令人困惑;) – Florent