CakePHP でユーザー モデルをページ分割するとき、いくつかの値で並べ替えることができますが、他の値では並べ替えることができません。たとえば、作成済みまたは電子メールで結果を並べ替えることができますが、ユーザー名または評判で並べ替えると、一見任意の順序でユーザーのリストが返されます。たとえば、次のようになります。
$this->paginate = array('conditions' => array('User.is_active' => true), 'limit' => 24, 'order' => array('User.created' => 'DESC'));
期待どおりに動作しますが、
$this->paginate = array('conditions' => array('User.is_active' => true), 'limit' => 24, 'order' => array('User.reputation' => 'DESC'));
しません。
最初はこれはデータベースの問題かもしれないと思っていましたが、データベースを直接検索すると、すべてが返され、期待どおりに並べ替えられます。
注: MongoDB と ichikaway の CakePHP 用 MongoDB プラグインを使用しています。ユーザーのページネーションは以前は正常に機能していたので、プラグインのバグではないと確信していますが、どこかで何かが変更されており、その内容を特定できません。
最後に、デバッグ情報でクエリを表示すると、検索時にCakePHP が注文値をデータベースに渡していないことがわかります。上記の最初の検索では、次のように表示されます。
db.users.find( {"is_active":true}, [] ).sort( {"created":-1} ).limit( 24 ).skip( 0 )
そして2番目にこれ:
db.users.find( {"is_active":true}, [] ).sort( [] ).limit( 24 ).skip( 0 )
CakePHP で注文できるものとできないものがあるのはなぜですか?