我在我的Zend Framework应用程序中使用Doctrine 2,一个典型的查询结果可能会产生一百万(或更多)个搜索结果。
我想使用与此结果集一致的Zend_Paginator。但是,我不想将所有结果作为数组返回,并使用array适配器,因为这样效率会很低,相反,我希望向分页器提供总行数,然后根据限制/偏移量为结果数组。
使用Array适配器可以做到这一点吗?或者我需要创建自己的分页适配器吗?
发布于 2011-03-03 00:39:15
您将不得不扩展您自己的适配器。Array适配器以您不想要的方式工作-它接收一个数组,并根据当前设置返回其中的一部分。您需要的是一个新的适配器,它将接受DQL statemenet并设置限制/偏移。
发布于 2011-05-21 09:53:25
这就是http://framework.zend.com/manual/en/zend.paginator.advanced.html
发布于 2012-02-21 03:40:51
您不需要实现Zend_Paginator_Adapter_Interface,,因为Zend_Paginator_Adapter_Iterator.已经实现了它
相反,可以简单地将Doctrine的分页器传递给Zend_Paginator_Adapter_Iterator,如下所示:
use Doctrine\ORM\Tools\Pagination as Paginator; // goes at top of file
SomeController::someAction()
{
$dql = "SELECT s, c FROM Square\Entity\StampItem s JOIN s.country c ".' ORDER BY '. $orderBy . ' ' . $dir;
$query = $this->getEntityManager()->createQuery($dql);
$d2_paginator = new Paginator($query);
$d2_paginator_iter = $d2_paginator->getIterator(); // returns \ArrayIterator object
$adapter = new \Zend_Paginator_Adapter_Iterator($d2_paginator_iter);
$zend_paginator = new \Zend_Paginator($adapter);
$zend_paginator->setItemCountPerPage($perPage)
->setCurrentPageNumber($current_page);
$this->view->paginator = $zend_paginator;
}然后,您可以像平常一样在视图脚本中使用分页器。
解释:
Zend_Paginator's构造函数可以接受Zend_Paginator_Adpater_Iterator实现的Zend_Paginator_Adapter_Interface,。现在,迭代器构造函数接受\ Zend_Paginator_Adapter_Iterator's 接口。此\迭代器构造函数还必须实现\(正如您通过查看Zend_Paginator_Adapter_Iterator's构造函数可以看到的那样)。由于Paginator::getIterator()方法根据定义返回一个\ArrayIterator,,因此它符合要求(因为\ArrayIterator同时实现了\Countable).和\
请参阅"Zend Framework:初学者指南“代码中从Doctrine 1到Doctrine:https://github.com/kkruecke/zf-beginners-doctrine2代码的这个端口。它包含了使用Zend_Paginator_Adapter_Iterator和Doctrine 2‘Doctrine\ORM\Tools\Pagination\Paginator.进行Zend_Paginator分页的代码
https://stackoverflow.com/questions/5169620
复制相似问题