重複を省いて正しい件数をだすPaginatorのやり方です。
データを取得するだけなら
CakePHP の find で DISTINCT を使って重複した行を除外してデータを取得する方法[WEBLE]
でいけます。
ページ分けをしてくれる便利プラグイン、Paginatorを使っているとどうでしょう。
fieldsはPaginatorに設定することができますが、カウントしている部分には使ってくれません。
どうしようかと思ったらPaginatorで自分用のカウント方法を設定する方法がありました。
モデルの中にpaginateCount関数を作ればよかったです。
1 2 3 4 5 6 7 8 9 10 |
public function paginateCount($conditions = null, $recursive = 0, $extra = array()) { $parameters = compact('conditions'); $this->recursive = $recursive; $extra['fields'] = 'DISTINCT '.$this->name.'.id'; // 重複削除 $count = $this->find('count', array_merge($parameters, $extra)); if (isset($extra['group'])) { $count = $this->getAffectedRows(); } return $count; } |