Cakephp PHP プログラミング

【Cakephp4】Paginator: 関連モデルのカラムをソートする方法

Cakephp4にてPaginatorヘルパーの sort() 機能に関連モデルのソートを行う場合、対象テンプレートファイル内に $this->Paginator->sort('関連モデル名.id') などと実装してもソートしてくれません。

そのような場合、コントローラー内にて sortableFieldsキーを利用し、ソートしたいカラム「モデル名.カラム名」を定義していく必要があります。
ちなみに、Paginator::defaultModel() の当該モデルのみの場合は、特にソート定義しなくても大丈夫です。

Cake4: 関連カラムのソートを有効にする

■コントローラークラス内、ページネート設定にて sortableFieldsキーを定義する

// クラスメソッド内に記述
$settings = [
    'sortableFields' => [
        'Hoges.id',
        'Hoges.name',
        'Fugas.type',
        'Fugas.tel',
    ],
];

じつは Cake3 では sortWhitelist キーとして利用できていましたが、Cake4.1の時点で非推奨になったようです。
最新では上記の sortableFields を利用するようにしましょう。

-Cakephp, PHP, プログラミング
-