首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zend_Paginator /原则2

Zend_Paginator /原则2
EN

Stack Overflow用户
提问于 2011-03-02 23:23:49
回答 3查看 1.5K关注 0票数 3

我在我的Zend Framework应用程序中使用Doctrine 2,一个典型的查询结果可能会产生一百万(或更多)个搜索结果。

我想使用与此结果集一致的Zend_Paginator。但是,我不想将所有结果作为数组返回,并使用array适配器,因为这样效率会很低,相反,我希望向分页器提供总行数,然后根据限制/偏移量为结果数组。

使用Array适配器可以做到这一点吗?或者我需要创建自己的分页适配器吗?

EN

回答 3

Stack Overflow用户

发布于 2011-03-03 00:39:15

您将不得不扩展您自己的适配器。Array适配器以您不想要的方式工作-它接收一个数组,并根据当前设置返回其中的一部分。您需要的是一个新的适配器,它将接受DQL statemenet并设置限制/偏移。

票数 3
EN

Stack Overflow用户

发布于 2011-05-21 09:53:25

这就是http://framework.zend.com/manual/en/zend.paginator.advanced.html

票数 0
EN

Stack Overflow用户

发布于 2012-02-21 03:40:51

您不需要实现Zend_Paginator_Adapter_Interface,,因为Zend_Paginator_Adapter_Iterator.已经实现了它

相反,可以简单地将Doctrine的分页器传递给Zend_Paginator_Adapter_Iterator,如下所示:

代码语言:javascript
复制
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分页的代码

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5169620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档