1

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 で注文できるものとできないものがあるのはなぜですか?

4

1 に答える 1

0

おっとっと。これデータベース エラーでした。どういうわけか、いくつかのフィールド (たとえば、_id、created、modified、およびその他のいくつか) のみを含むレコードが作成されました。それを削除すると、すべてが正常に戻りました。

検索を実行すると問題なく動作するのに、同じパラメータでページ分割するとうまくいかないのは奇妙です。結局プラグイン/Cakeのバグなのかな?

于 2012-11-02T14:30:21.667 に答える