🦁
CakePHP4のページネーションで関連テーブルのソートリンクを有効にする方法
動作確認時の環境
CakePHP:4.2.8
PaginatorHelper::sort()を使いソートリンクを作成しても関連テーブルを使う場合、デフォルトのままだと動作しません。そこで関連テーブルのソートリンクを有効にする方法を紹介したいと思います。
方法
PaginatorHelper::sort()の引数の値(URLのGetパラメータのsortの値)とControllerの$paginate['sortableFields']の値を一致させる。
例えばtemplateファイルでPaginatorHelper::sort()の値がBooks.nameの場合
<?= $this->Paginator->sort('Books.name') ?>
Controllerで下記の様に記述する。
public $paginate = [
'sortableFields' => [
'Books.name',
],
];
関連テーブルがない場合、$paginateに'sortableFields'を指定しなくても問題なくソートされるが、'sortableFields'に値を1つでも設定すると設定された値しかソートされなくなる。
Discussion