3

Zend Framework アプリケーションで Doctrine 2 を使用していますが、典型的なクエリ結果は 100 万件 (またはそれ以上) の検索結果を生成する可能性があります。

この結果セットに合わせて Zend_Paginator を使用したいと考えています。ただし、すべての結果を配列として返し、配列アダプターを使用するのは効率的ではありません。代わりに、ページネーターに行の合計量と、制限/オフセット量に基づく結果の配列を提供したいと考えています。 .

これは配列アダプターを使用して実行できますか、それとも独自のページネーション アダプターを作成する必要がありますか?

4

3 に答える 3

3

独自のアダプタを拡張する必要があります。配列アダプタは、希望しない方法で機能します。配列を受け取り、現在の設定に基づいてその一部を返します。必要なのは、DQLステートメネットを取得して制限/オフセットを設定する新しいアダプターです。

于 2011-03-02T16:39:15.100 に答える
0

ここにありますhttp://framework.zend.com/manual/en/zend.paginator.advanced.html

于 2011-05-21T01:53:24.883 に答える
0

Zend_Paginator_Adapter_Interface は Zend_Paginator_Adapter_Iteratorによって既に実装されているため、実装する必要はありません。

代わりに、次のように Doctrine のPaginatorZend_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_Adpater_Iteratorが実装するZend_Paginator_Adapter_Interfaceを取ることができます。現在、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。Doctrine 2' Doctrine\ORM\Tools\Pagination\PaginatorでZend_Paginator_Adapter_Iteratorを使用してZend_Paginatorでページネーションするためのコードが含まれています。

于 2012-02-20T19:40:50.560 に答える