CakePHP paginator忽略了顺序,但只针对某些值

时间:2012-11-01 19:31:20

标签: mongodb cakephp cakephp-2.0 mongodb-query

在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和CakePHP的ichikaway MongoDB插件;分页用户以前工作得很好,所以我很肯定这不是插件的错误,但某些地方已经改变,我无法确定是什么。

最后,当我在调试信息中查看查询时,我发现CakePHP在搜索时甚至没有将 order 值传递给数据库。上面的第一个搜索显示了这个:

db.users.find( {"is_active":true}, [] ).sort( {"created":-1} ).limit( 24 ).skip( 0 )

和第二个:

db.users.find( {"is_active":true}, [] ).sort( [] ).limit( 24 ).skip( 0 )

为什么CakePHP让我按某些方式订购,而不是其他人订购?

1 个答案:

答案 0 :(得分:0)

糟糕。它数据库错误;不知何故,一条记录只用其中的几个字段创建(例如,_ id,创建,修改,和其他几个),这不是我唯一可以排序的记录。 。删除它让一切恢复正常。

奇怪的是,进行搜索会正常工作,但使用相同参数进行分页则不会。也许它毕竟是插件/ Cake Bug?