Posted on

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

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

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


CakePHP1.3で

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