【发布时间】:2019-05-28 17:53:05
【问题描述】:
有一个 formatResults 回调函数,它将“自定义计算”字段添加到从我的 Cakephp 中的模型查询返回的实体帖子中。我想按此字段排序并在分页上使用它这可能吗?
到目前为止,我无法做到这一点,因为分页限制了获取的记录,因此只有小于分页器限制的记录才会被排序,而不是所有结果集......
当前代码:
$owners = $this->Owners->find('all');
$owners->formatResults(function (\Cake\Collection\CollectionInterface $owners) {
$owners = $owners->map(function ($entity) {
$entity->random = rand(0,1);
return $entity;
});
return $owners->sortBy(function ($item){
return $item->random;
},SORT_DESC);
});
这按预期工作:
$owners->toArray();
这不是:
$owners = $this->paginate($owners);
$owners->toArray();
主要是因为它的“回调处理”只有前 10 条记录,我想处理整个结果集。
【问题讨论】:
-
要使分页工作,您需要在 SQL 查询中有
sort子句。这看起来只是随机选择 10 个,这是实际用例还是只是一个示例?如果这确实是您所需要的,并且您的数据库中没有数百万行,那么find('all')->order('rand()')->limit(10)之类的东西应该可以工作。