ZF2のほとんどの場合、次のようなページネーターを実行します。
public function fetchAll()
{
$resultSet = $this->tableGateway->select();
return $resultSet;
}
$iteratorAdapter = new \Zend\Paginator\Adapter\Iterator($this->getSampleTable()->fetchAll());
$paginator = new \Zend\Paginator\Paginator($iteratorAdapter);
このアプローチの問題は、クエリ結果を制限しておらず、fetchAll がすべての結果を返すことです (db と php の間で大きなトラフィックが発生します)。
純粋な phpでは、次のようなページネーションを行います。
$PAGE_NUM = $_GET['page_num'];
$result_num = mysq_query("SELECT * FROM table WHERE some condition");
$result = mysq_query("SELECT * FROM table WHERE some condition LIMIT $PAGE_NUM, 20");
echo do_paginator($result_num, 20, $PAGE_NUM);//THIS JUST MAKE THE CLASSIC < 1 2 3 4 5 >
これの利点は、mysql の LIMIT オプションのおかげで、ページネーションで必要なデータのみを DB から取得できることです。これは、あまりにも多くのレコードを返すクエリで優れたパフォーマンスを発揮します。
結果に効果的な制限を加えて ZF2 ページネーターを使用できますか、それとも独自のページネーターを作成する必要がありますか?