2013-04-09 20 views
17

すぐに私はこの質問Doctrine2 Paginatorを読んでいると言いますが、私の質問のタイトルに関する十分な情報は得られません。私はDoctrine1を使用する場合Doctrine2 Paginatorの合計結果が

私は、例えば、そのようなコードで結果を得ていた。

$list = $this->query 
    ->addSelect('SQL_CALC_FOUND_ROWS *') 
    ->offset(($this->currentPage - 1) * $this->perPage) 
    ->limit($this->perPage) 
    ->execute(array(), \Doctrine_Core::HYDRATE_ARRAY_SHALLOW); 

$totalRecords  = SqlCalcFoundRowsEventListener::getFoundRowsCount(); 
$this->totalPages = ceil($totalRecords/$this->perPage); 

、それは素晴らしかったです。

Doctrine2を使用すると、現在のページの制限付き検索結果と同じクエリでレコードの総量を取得する方法が混乱します。

ご迷惑をおかけして申し訳ございません。

+1

は、最終的には明日お答えします - 今、HTTPSでページネータのテストをチェックしてくださいするために:// githubの。 – Ocramius

+0

テストを見ましたが、paginatorに渡す前にクエリに制限を設定するテストはありません。たぶん私は何かを誤解しました。 – Eugene

答えて

38

ページネータの使用量は以下の通りである:

$paginator = new \Doctrine\ORM\Tools\Pagination\Paginator($query); 

$totalItems = count($paginator); 
$pagesCount = ceil($totalItems/$pageSize); 

// now get one page's items: 
$paginator 
    ->getQuery() 
    ->setFirstResult($pageSize * ($currentPage-1)) // set the offset 
    ->setMaxResults($pageSize); // set the limit 

foreach ($paginator as $pageItem) { 
    echo "<li>" . $pageItem->getName() . "</li>"; 
} 
+6

btwの場合、制限とオフセットを設定する前に '$ paginator'を' count() 'する必要はありません。 paginatorを初期化する前に制限とオフセットを設定することができます。これは期待どおりに動作します。 –

+1

'count()'の例は 'Countable'であることを示しています – Ocramius

+2

そのクラスのユーティリティが表示されないPaginator、何も追加していない、デフォルトのオブジェクト結果で同じ機能を得ることができる –

0

またはいくつかの他のループ:

for ($i=0; $i < $pagesCount; $i++) { 
     if ($currentPage == ($i+1)) { 
      $pagination1 .= '<li class="active"><a href="'.\URL::current().'?pagina='.($i+1).'" title="">'.($i+1).'</a></li>'; 
     }else{ 
      $pagination1 .= '<li><a href="'.\URL::current().'?pagina='.($i+1).'">'.($i+1).'</a></li>'; 
     } 
    } 
+0

ようこそStackoverflowと答えに時間をかけてくれてありがとう!回答にはコードブロックだけでなく、解決策を説明する説明文を追加してください。 –