CakePHP3 ページネーション使用時の関連モデルの並び替え(Paginator, sortWhitelist)
あけましておめでとうございます。fujiharaです。
個人では今年1本目の記事になります。
今回はCakePHPでページネーションを使う際に関連モデルのカラムで
取得順を変更したい場合の方法をご紹介いたします。
通常(例)
usersテーブルがあり一覧を作成日昇順でページネーションで取得する場合は 以下の用に使用します。
// コントローラ関数内
$this->paginate = [
'order' => ['Users.created' => 'asc']
];
$users = $this->paginate($this->Users);
....
関連モデル
Usersが関連テーブルとしてbooksテーブルを持っている場合booksテーブルの一覧をページネーションで 取得し、usersテーブルの作成日昇順で行う場合以下のようにする必要があります。
// コントローラ関数内
$this->paginate = [
'contain' => ['Users'],
'order' => ['Users.created' => 'asc'],
'sortWhitelist' => ['Users.created'],
];
$users = $this->paginate($this->Books);
....
関連モデルで並び順を変更したい場合、sortWhitelistに並び替えたいカラムを
宣言してあげないと反映されないので、注意が必要です。
sortWhitelistを書かなくてもエラーは出ずに、orderが反映されないデータが取得できるので
ハマりました。