リストに表示されない予約番号があります!
と連絡を受けましたが正直「見落としじゃないのか?」と疑っていました。
受注日で並び替えすると正しくない結果が。。。
SQLを見ると単純に受注日で並び替えているので問題ないと思っていましたが
受注日が複数ページにまたがると重複表示されたり表示されない予約がありました。
主キーで並び替えないとダメ
考えてみたら当たり前ですね。
受注日順、予約番号(主キー)順になっていなければ予約番号はコントロールできていません。
コアコンポーネントなのでさわりたくないですが。。。
PaginatorComponent.phpをローカルのコンポーネントフォルダにコピーして変更を行ないました。
問題の箇所はvalidateSort()内の\$options['sort']が設定された場合のみなので
該当IF文の最後に\$options['sort']が主キーと違う場合は
主キーを並び替えに加える様にしています。
※修正時CakePHPのバージョンは 2.5.2 です。
PHP
if (isset($options['sort'])) {
$direction = null;
if (isset($options['direction'])) {
$direction = strtolower($options['direction']);
}
if (!in_array($direction, array('asc', 'desc'))) {
$direction = 'asc';
}
$options['order'] = array($options['sort'] => $direction);
//以下のif文を追加
if ( $options['sort']<>"$object->name.$object->primaryKey" && $options['sort']<> $object->primaryKey ){
$options['order'] = array_merge( $options['order'] , array( "$object->name.$object->primaryKey"=>'ASC' ));
}
}