私はプロジェクトでZf1.10を使用しており、このビットまでZend_PaginatorをZend_DbTableクエリと一緒に使用してきました。
クエリでは、結合によって作成された重複行を削除するためにDISTINCTキーワードが必要ですが、それを追加すると、実際には1ページの結果しかないのに、ページネーターが2ページの結果のナビゲーションを誤って表示します。掘り下げてみると、2つのクエリが実行されていることがわかります。1つは私が追跡している結果セット(77行)に対するもので、もう1つはカウントを取得するためのものです。ただし、Zendマジックによって生成された2番目のクエリにはDISTINCTキーワードが含まれていないため、カウントは77行ではなく112行を返します。
これが関連するビットです
$select = $this->select()
->setIntegrityCheck(false)
->from('companies')
->distinct()
->join('project_team', 'companies.companyID = project_team.companyID', null)
->join('project_team_roles', 'project_team.roleID = project_team_roles.roleID', null)
->join('projects', 'projects.projectID = project_team.projectID', null)
->where('project_team_roles.isArchitect')
->where('companies.companyName LIKE ?', '%' . $str . '%')
->where('projects.islive AND NOT projects.isDeleted')
->order('companies.companyName');
$adapter = new Zend_Paginator_Adapter_DbTableSelect($select);
$paginator = new Zend_Paginator($adapter);
$paginator->setCurrentPageNumber($page);
$paginator->setItemCountPerPage(100);
return $paginator;
countクエリのDISTINCT句を無視する以外は、生成するクエリに問題はありません。-> distinct()ビットを削除すると、すべてうまくいきます-データに重複する行があることを除いて、112行とページ付けはすべてスーパーです。
バグレポートが同様の問題について公正な方法で戻っているのがわかりますが、以前のバージョンのZFでは修正済みとしてマークされています
?これは既知の落とし穴ですか?自分のページネーションを書かずにそれについてできることはありますか?ページ付けを書くのが特に難しいというわけではありませんが、それはこのビットがプロジェクトの他の部分と矛盾することを意味します
どうもありがとう
イアン
編集-以下の回答として投稿された回避策を見つけました。