2013-04-09 53 views
17

馬上我會說,我讀了這個問題Doctrine2 Paginator,但它沒有給我足夠的信息關於我的問題的標題。Doctrine2 Paginator獲得總體結果

當我用Doctrine1我正在與例如這樣的代碼的結果:

$list = $this->query 
    ->addSelect('SQL_CALC_FOUND_ROWS *') 
    ->offset(($this->currentPage - 1) * $this->perPage) 
    ->limit($this->perPage) 
    ->execute(array(), \Doctrine_Core::HYDRATE_ARRAY_SHALLOW); 

$totalRecords  = SqlCalcFoundRowsEventListener::getFoundRowsCount(); 
$this->totalPages = ceil($totalRecords/$this->perPage); 

,它是偉大的。

現在,當使用Doctrine2我很困惑我該如何獲得與當前頁面的限制結果相同的查詢記錄總量。

任何幫助/建議將不勝感激。

+1

最終會回答明天 - 現在請HTTPS檢查的分頁程序測試:// github上。 com/doctrine/doctrine2/blob/master/tests/Doctrine/Tests/ORM/Functional/PaginationTest.php – Ocramius 2013-04-09 21:46:15

+0

查看測試,但沒有測試,在將查詢傳遞給paginator之前設置了限制。也許我誤解了一些東西。 – Eugene 2013-04-09 22:33:44

回答

38

的分頁程序用法如下:

$paginator = new \Doctrine\ORM\Tools\Pagination\Paginator($query); 

$totalItems = count($paginator); 
$pagesCount = ceil($totalItems/$pageSize); 

// now get one page's items: 
$paginator 
    ->getQuery() 
    ->setFirstResult($pageSize * ($currentPage-1)) // set the offset 
    ->setMaxResults($pageSize); // set the limit 

foreach ($paginator as $pageItem) { 
    echo "<li>" . $pageItem->getName() . "</li>"; 
} 
+6

順便說一句,在設置限制和偏移量之前,您不需要「計數()'$ paginator'。您可以在初始化分頁程序之前設置限制和偏移量,它仍然按預期工作。 – 2014-06-10 19:12:08

+1

'count()'的例子只是爲了表明它是一個'Countable' – Ocramius 2014-06-11 21:04:40

+2

我沒有看到該類的實用工具Paginator,沒有添加任何東西,我可以使用默認對象結果獲得相同的功能 – 2017-04-06 23:09:01

0

或者一些其他的循環:

for ($i=0; $i < $pagesCount; $i++) { 
     if ($currentPage == ($i+1)) { 
      $pagination1 .= '<li class="active"><a href="'.\URL::current().'?pagina='.($i+1).'" title="">'.($i+1).'</a></li>'; 
     }else{ 
      $pagination1 .= '<li><a href="'.\URL::current().'?pagina='.($i+1).'">'.($i+1).'</a></li>'; 
     } 
    } 
+0

歡迎來到Stackoverflow並感謝您花時間回答!答案不應該只包含一段代碼,但請添加一些描述您的解決方案的描述性文字。 – 2014-03-16 00:21:43