CakePHP 3.x 为分页指定不同的计数查询

CakePHP 3.x Specify a Different Count Query for Pagination

我正在尝试为 CakePHP 自定义分页查询我正在使用基于视图的模型。该视图中有一些复杂的计算,当分页 运行s 时,拉出 20 行左右需要大约 3 秒。然后它 运行 将相同的视图包装在一个计数中,用于分页中使用的计数。我可以 运行 一个简单的 table 依靠另一个 table ,这会将加载时间减半,但我无法找到一种简单的方法来自定义单独的查询 运行对于计数。这甚至可能吗?

我知道另一个用户问过这个问题,但从未得到回答。

Cakephp 3.x Custom Query Pagination

我已经尝试过在实体和 table 中使用自定义 paginateCount 函数在 2.x 中工作的方式,但都不起作用我对 API 进行了一些研究,但找不到与计数相关的任何内容。

一种选择是使用查询构建器的 counter() 方法提供一个回调,returns 根据您的自定义查询记录的数量。

$query->counter(function (\Cake\ORM\Query $query) {
    // assuming $this uses \Cake\ORM\Locator\LocatorAwareTrait
    $OtherTable = $this->getTableLocator()->get('Other');
    $otherQuery = $OtherTable->find();

    // ...

    return $otherQuery->count();
});

$query 参数将是查询本身的克隆。您可以修改那个查询,也可以构建一个全新的查询。

另见