2016-03-10 71 views
2

我正在處理一個相當複雜的查詢生成器(在存儲庫函數中),它使用了很多東西,如partial c.{id,name,created}和一堆fetchjoins來試圖保留數據量和數據量向下查詢。Doctrine2 Paginator,getArrayResult

然而,這還不夠,但前端表示無論如何都是分頁的,所以我想在需要時進行一些Ajax調用來獲取數據。

$qb = $this->createQueryBuilder('c') 
    ->select('a whole bunch') 
    ->join('many joins') 
    ->setFirstResult(0) 
    ->setMaxResults(10) 

上述方法doesn't work for complex joins,我做setMaxResults(10)並獲得2分的結果,setMaxResults(1000)讓我118分的結果。學說建議使用他們的Pagination類,因爲它會正確處理計數/迭代。

現在,如果我循環遍歷由new Paginator($query, true)提供的Iterator對象,但是調用存儲庫函數的代碼期望從getArrayResult獲取數組,那麼該方法工作良好。

迭代器包含完整的實體對象,這意味着我將不得不重寫所有服務以使用方法而不是數組鍵。

有沒有辦法將Paginator與ArrayResult一起使用?

回答

4

Hydration Mode添加到您的查詢。

//Set query hydration mode 
$query->setHydrationMode(\Doctrine\ORM\Query::HYDRATE_ARRAY);