Posted on

CakePHP PaginateのソートでJOINしたテーブルのカラムを指定する

PaginateのソートでJOINしたテーブルのカラムを指定・・・

動かない・・・なぜだろうと調べてみたのでメモ
testsテーブル(id, name)
test_detailsテーブル(id, test_id, name)
があったとします。
echo $paginator->sort('氏名', 'TestDetail.name');
では動きません。
SQLエラー防止の為に親テーブルにないカラムは無視するようです。
http://xxxx/sort:column/direction:ascで適当なカラムを指定できるので
ではどうするのか・・・


CakePHP1.3で

MODELのプロパティでvirtualFieldsがあるのでこれを使用します。
MODEL
public $virtualFields = array(
'detail_name' => 'TestDetail.name',
);
※detail_nameは任意のカラムに存在しない名前で
VIEW
echo $paginator->sort('氏名', 'TestDetail.detail_name');
としてあげればOKです。
(virtualFieldsは設定したMODELでfindするたびにfieldsに設定されて邪魔なので、一覧表示で必要な時だけプロパティ設定した方がいいです。)