頻繁にあり得るシチュエーション。
検索結果をPaginatorに渡して一覧表示させたい、という場合。
今回はfind等は使わず、独自SQLをPaginatorに渡して
一覧表示させてみました。
satthi殿の公開されているModelを引用させていただきました。
CakePHPで素書きのSQLでもPaginatorを使いたい! – Qiita
http://qiita.com/satthi/items/216f951d48187499abe7
技術系サイトの中でも特にQiitaは、最近上位表示されている気がしますね。
$query['extra']['type'] = $sql; $this->Paginator->settings = $query; $customers = $this->Paginator->paginate('RawSql');
これでカンペキ!と思っていたら落とし穴がありました。
POSTされた検索条件を$this->request->dataから取得していたのですが、
次ページに遷移した時などにおかしな動きになってしまうのです。
調べてみると$this->request->dataが初期化されてしまうことが原因。
ということでSession変数に一旦退避させ、
そこから検索条件を取得することで対応しました。
define('VAR_SESSION', 'SEARCH_CONDITION'); if (empty($this->request->data['search']) == false) { $this->Session->write(VAR_SESSION, $this->request->data['search']); } $params = null; if($this->Session->check(VAR_SESSION)) { $params = $this->Session->read(VAR_SESSION); } $sql = $this->(Model名)->(SQL生成するメソッド名)($params);
seto-san殿のブログを参考にさせていただきました。
1.2・検索結果をpaginateする方法 – せとっちの備忘録(技術系)
http://d.hatena.ne.jp/seto-san/20090813/1250171541