CakePHP3 ページネーション使用時の関連モデルの並び替え(Paginator, sortWhitelist)

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が反映されないデータが取得できるので ハマりました。

参考:ページネーション

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ