簡體   English   中英

Zend_Paginator / Doctrine 2

[英]Zend_Paginator / Doctrine 2

我在Zend Framework應用程序中使用Doctrine 2,典型的查詢結果可以產生一百萬(或更多)搜索結果。

我想使用Zend_Paginator與此結果集一致。 但是,我不希望將所有結果作為數組返回並使用數組適配器,因為這樣效率很低,而是我想為分頁器提供總行數,然后根據限制/偏移量提供結果數組。

這是可行的使用數組適配器還是我需要創建自己的分頁適配器?

您必須擴展自己的適配器。 數組適配器以您不想要的方式工作 - 它接收一個數組並根據當前設置返回一部分數組。 您需要的是一個新的適配器,它將采用DQL statemenet並設置限制/偏移量。

您不需要實現Zend_Paginator_Adapter_Interface ,因為它已由Zend_Paginator_Adapter_Iterator實現。

相反,可以簡單地將Doctrine的Paginator傳遞給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; 
}

然后你就像普通人一樣在視圖腳本中使用paginator。

說明:

Zend_Paginator的構造函數可以使用Zend_Paginator_Adapter_InterfaceZend_Paginator_Adpater_Iterator實現它。 現在, Zend_Paginator_Adapter_Iterator的構造函數采用\\ Iterator接口。 這個\\ Iterator還必須實現\\ Countable (通過查看Zend_Paginator_Adapter_Iterator的構造函數可以看到)。 由於Paginator :: getIterator()方法返回一個\\ ArrayIterator ,因此根據定義它符合賬單(因為\\ ArrayIterator實現了\\ Iterator\\ Countable )。

從Doctrine 1到Doctrine的“Zend Framework:A Beginner's Guide”代碼中,參見Doctrine 1到Docrine 2的端口: https//github.com/kkruecke/zf-beginners-doctrine2 它包括使用Zend_Paginator_Adapter_Iterator和Doctrine 2'Desstrine \\ ORM \\ Tools \\ Pagination \\ PaginatorZend_Paginator進行分頁的代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM