あるシステムで日報の1日の予定を登録して頂いていて、
日付単位とその中の詳細の予定の2段階でのソートをする必要がありました。
第一ソート条件は日付で第二ソート条件が詳細予定の時間というソートを実現させる実装方法です。
まずviewでpaginatorのソートの記述を書きます。
Paginator->sort(‘report_date’, ‘訪問日時’); ?>
次にコントローラーで次のように書きます。
if (empty($this->passedArgs['sort'])) {
$order = array('Report.report_date' => 'desc', 'Report.staff_id' => 'asc', 'ReportDetail.report_date' => 'asc');
}elseif ($this->passedArgs['sort'] == 'report_date'){
$order = array('Report.report_date' => $this->passedArgs['direction'], 'Report.staff_id' => 'asc', 'ReportDetail.report_date' => 'asc');
}
$this->ReportDetail->setOrder($order);
最後にモデルで次のように書きます。
// デフォルトのソート条件は何もなし
var $order = array();
function setOrder($order) {
// controllerから渡された$orderを変数に持っておく
$this->order = $order;
}
function beforeFind($queryData) {
// 実行中のfindの種別が'count'以外だった場合のみ、
// ソート条件を追加し、$orderを初期化する
if ($this->findQueryType != 'count' ) {
array_unshift($queryData['order'], $this->order);
$this->order = array();
}
return $queryData;
}
これでCakeのpaginatorのソートを押して複数条件のソートが行えました。
作成するに当たり下記サイトを参考にさせて頂きました。
http://d.hatena.ne.jp/atcorp/20100213/p1




