No.385


【CakePHP3】paginatorのデフォルトソート条件

paginatorの機能は生かしつつデフォルトソートをしたい

 ぱっと思いつくのはfind時にorderや無名関数を使うことだろうけど、そうするとソート順が固定になってしまう。
 もちろんpaginatorのソート指示があるときは無視するなど、判定式で処理を分岐させればできるけど、いまいちスマートじゃない。

 そんなときはCakePHP2のころからの伝統、$this->paginateを利用すればOK。


設定

Controller::paginate() の使用

 コントローラーのプロパティ$paginateorder項目にソート順を記述してあげれば良い。

public $paginate = [
   ...
   'order' => [
        'デフォルトソート対象' => 'asc or desc'
    ],
    ...
];

 もちろんパラメータsortが来ればそちらが優先される。ご安心。


参考:その他の設定

 他にも$paginateはいろいろなデフォルト設定ができる。

ソート許可項目(複数モデルをソートさせるのにも使う)

limit

contain

 など。