2013-04-09 52 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