1
我想在我的查詢中使用限制和偏移量,但返回的記錄數不匹配。當我不使用偏移和限制功能得到26個物體,並設置方法Doctrine2 OFFSET和LIMIT
->setMaxResults(5)
->setFirstResult(10)
數爲1 ... 後,這是怎麼回事?
我想在我的查詢中使用限制和偏移量,但返回的記錄數不匹配。當我不使用偏移和限制功能得到26個物體,並設置方法Doctrine2 OFFSET和LIMIT
->setMaxResults(5)
->setFirstResult(10)
數爲1 ... 後,這是怎麼回事?
你可能是在DQL中獲得fetch-joining時遇到的一個典型問題。這是一個非常簡單的問題,並且源於偏移和限制應用於尚未水合且必須標準化的結果集的事實(請參閱documentation about first and max results about that)。
如果您想避免此問題(即使使用更復雜的聯接或聯接結果),您將需要使用ORM DQL Paginator API。使用分頁程序基本觸發多個查詢:
它的使用是非常簡單的:
$query = $em->crateQuery($fetchJoinQuery);
$paginator = new \Doctrine\ORM\Tools\Pagination\Paginator($query);
$query->setFirstResult(20);
$query->setMaxResults(100);
foreach ($paginator as $result) {
var_dump($result->getId());
}
這將從偏移量20開始打印100個項目,而不考慮連接或提取連接結果的數量。
雖然這可能看起來是無法執行的,但它是處理提取連接結果問題的最安全方法,導致結果中出現明顯雜亂的偏移和限制。你可以看看如何直接處理internals of the ORM Paginator。
你加入其他表嗎? – 2013-02-25 18:38:42
是'$ Q = $ EM-> createQueryBuilder() \t \t - >選擇( '一個,TT') \t \t - >從( 'MyBackendBundle:廣告', 'A') \t \t - > leftJoin( 'a.transactionType', 'TT') \t \t - > leftJoin( 'a.propertyType', 'PT') \t \t - > leftJoin( 'a.place', 'p') \t \t - > leftJoin ('a.pictures','pic') \t \t - > where('tt.name LIKE:transactionType') \t \t - > andWhere(「pt.name LIKE:propertyType」);' – leebake 2013-02-25 18:45:01
限制行時必須考慮連接 – 2013-02-25 21:56:56