2015-03-31 47 views
0

在我的symfony2/doctrine2應用程序中,用戶可以標記引起管理員注意的元素。doctrine2:如何從不同的存儲庫中選擇實體

我需要檢索所有標記的元素(它們實現了一個VoteInterface)。

我試圖沒有成功做到以下,但它不工作,因爲我需要選擇至少一個根實體。如果我選擇一個根實體,我有一個內存分配錯誤。

無論如何,我甚至不確定這是正確的路要走。我如何選擇與投票相關的所有元素?當然,我可以爲每個實體類型構建一個查詢構建器,但這不是我要在這裏完成的,我想要一個查詢構建器。

public function getFlagsQueryBuilder() 
{ 
    return $this 
     ->createQueryBuilder('v') 
     ->select('u, c, p') 
     ->leftJoin('v.user', 'u') 
     ->leftJoin('v.comment', 'c') 
     ->leftJoin('v.post', 'p') 
     ->groupBy('u, c, p') 
     ->addSelect('u, c, p') 
     ->where('v.value = ?1') 
     ->setParameter(1, 0) 
     ; 
} 

回答

0

如果您遇到內存問題,可能是因爲您同時在內存中加載了太多行。

從學說文檔: http://doctrine-orm.readthedocs.org/en/latest/reference/batch-processing.html#iterating-large-results-for-data-processing

它可以讓你通過你的結果迭代,而無需內存問題。它會在需要時加載行。

你也可以使用這些方法來查詢行的數量有限:

查詢:: setMaxResults($的maxResults)

查詢:: setFirstResult($偏移)

如果您計劃在列上獲取COUNT,SUM,AVG或任何其他集合函數時,我建議您進行查詢以獲取這些信息,而不是迭代中的聚合信息。查詢會更快。

我希望這有助於

+0

謝謝,但我更想弄清楚如何正確地寫這個查詢來一次獲取不同的實體。 – 2015-03-31 23:12:30

相關問題