paginator のカスタマイズ

paginate する対象がテーブルやそのカラムと1対1なら かなり簡単に使えるんだけど、
たとえばソートキーが複数カラムに渡る場合とかになるとちょっとカスタマイズがいる。

コントローラ内で
$this->paginate('Model');
とすると、通常は
Model::find('count');
Model::find('all');
がコールされて paginate する。
※all は通常の場合。controller の default プロパティでインデックス0に type 指定するとそれを使用できる。


該当のモデルに「paginateCount」「paginate」メソッドが定義されていると
こちらがコールされる。引数は以下の通り。
Model::paginateCount($conditions, $recursive, $extra);
Model::paginate($conditions, $fields, $order, $limit, $page, $recursive, $extra);

$extra は controller の default プロパティで指定したキーのうち 'conditions', 'fields', 'order', 'limit', 'page', 'recursive' 以外のものが入る。


という感じなので、ソートキーが複数カラムに渡る場合なんかは
Model::paginate() を定義してその中で対処すればいい。