[英]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_Interface , Zend_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 \\ Paginator與Zend_Paginator進行分頁的代碼 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.