LoginSignup
6
7

More than 5 years have passed since last update.

CakePHP2 ページネータのバグ?調整

Last updated at Posted at 2014-07-25

リストに表示されない予約番号があります!

と連絡を受けましたが正直「見落としじゃないのか?」と疑っていました。

受注日で並び替えすると正しくない結果が。。。

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' ));
    }
}
6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7