3

私はプロジェクトで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では修正済みとしてマークされています

?これは既知の落とし穴ですか?自分のページネーションを書かずにそれについてできることはありますか?ページ付けを書くのが特に難しいというわけではありませんが、それはこのビットがプロジェクトの他の部分と矛盾することを意味します

どうもありがとう

イアン

編集-以下の回答として投稿された回避策を見つけました。

4

2 に答える 2

2

これはずっと前に尋ねられましたが、まだ答えが必要です。

コントローラーで setRowCount() メソッドを使用する必要があります。

$select = $your_model->getSelect();
$select_count = $your_model->getCount(); // geting count from select above
$adapter = new Zend_Paginator_Adapter_DbSelect($select);
$adapter->setRowCount((int)trim($select_count)); // <-- // set integer !
$paginator = new Zend_Paginator($adapter);
// That's it
...

$this->view->paginator = $paginator; 
// and so on...
于 2011-10-25T12:11:24.927 に答える
0

簡単な回避策が見つかりました... DbTable アダプターを使用しないで、結果を配列に取得し、それをページネーターに渡します

$results = $this->fetchAll($select)->toArray(); 
$adapter = new Zend_Paginator_Adapter_Array($results);

このバグがあるのは DbTable だけのようです。

頑張ってください!

于 2010-10-10T11:09:45.607 に答える