joinした列でソートする
ソートというのはViewの列名をクリックしてするソートではなく、
ControllerでのSQLのソートです。
virtualFieldsをMoldeに設定します。
'Csv.file_name',
'sort_upload_date' => 'Csv.upload_date',
'sort_status' => 'Csv.status',
);
・・・
そしてControllerのOrderではモデル名をつけないバーチャルフィールド名を使用します。
public function index() {
$this->Csv->recursive = 0;
$this->paginate = array(
'order' => array('sort_period' => 'desc','sort_upload_date'=>'desc'),
);
$this->set('csvs', $this->Paginator->paginate());
paginateでorder条件を複数指定する
paginateでorderを複数指定しても効きません。
コアライブラリの修正が必用です・・・。
・lib/Cake/Controller/Component/PaginatorComponent.php
を
・app/Controller/Component/PaginatorComponent.php
にコピーします。
そして下記1行を修正します。
//$options['order'] = array($options['sort'] => $direction); $options['order'] = array_merge(array($options['sort'] => $direction), $options['order']);
paginateでorderを複数指定したサンプルです。
Controllerのアクション内で以下のようにします。
$this->paginate = array(
'Csv' => array(
'conditions' => array(Csv.val LIKE' => '%'.$val.'%' ),
'fields'=>array
'Csv.id','Csv.val,'Comp.comp_name','User.user_email'),
'order' => array('Csv.id' => 'asc','Csv.val'=>'asc'),
'joins' => array(array('type' => 'LEFT', 'alias' => 'Comp', 'table' => 'companies','conditions' => 'Csv.comp_code = Comp.comp_code'),
array('type' => 'LEFT', 'alias' => 'User', 'table' => 'users','conditions' => 'Csv.user_id = User.id')
)
),
);
$this->set('csvs', $this->Paginator->paginate());

