🦁

CakePHP4のページネーションで関連テーブルのソートリンクを有効にする方法

2021/11/18に公開

動作確認時の環境
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