Doctrine2分页器获取总结果

22

我想说的是,我读了这个问题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
看了一下测试,但是没有测试将查询限制在传递给分页器之前。也许我误解了什么。 - Eugene
2个回答

54

分页器的使用方法如下:

$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>";
}

9
顺便说一句,在设置限制和偏移量之前,您不需要对 $paginator 进行 count() 计数。您可以在初始化分页器之前设置限制和偏移量,它仍将按预期工作。 - Ramy Nasr
2
count() 的示例只是为了说明它是可计数的。 - Ocramius
3
我不认为那个Paginator类有什么用处,它并没有增加任何功能,我可以通过默认对象结果获得相同的功能。 - fpilee
6
如果涉及到连接查询,分页器提供可靠的结果。 - Ocramius

-1

或者其他循环:

    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>';
        }   
    }

欢迎来到Stackoverflow,感谢您抽出时间回答问题!一个答案不应该只包含一段代码块,还请添加更多描述性的文字来解释您的解决方案。 - David Mulder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接