如何使用后计算字段对Cakephp查询进行排序并将其传递给分页?

时间:2019-05-28 17:53:05

标签: php cakephp paginator

具有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条记录,所以我想处理整个结果集。

1 个答案:

答案 0 :(得分:0)

围绕ive进行的挖掘发现在this link上,前一个用户打开了一个类似的主题,看来除了数据库中的字段之外,无法使用分页排序。

因此,我建议:

1-要么通过创建虚拟字段来更改模型逻辑以适应您的要求,要么更改数据库架构以包含此数据。

2-如果数据需要进一步处理或实时处理并且无法在数据库中添加或计算,则也许编写一个将在cakephp集合上复制分页功能的组件编程是一个不错的选择。这种方法的缺点是所有记录将从数据库中返回,这可能会在大型结果集上带来性能问题。