如何在 CakePHP 3 中对自定义查找器的结果进行分页



如何在 CakePHP 3(特别是 3.7(中对自定义查找器的结果进行分页?

我有一个带有自定义查找器的模型:

// src/Model/Table/RevisionFiltersTable.php
public function findRegulatoryNotifications($date_start, $date_end, $regulation_id = 1, $u_id, $o_id, $count_only = false)
{
}

在此查找器中,有一些方法可以使用ORM并执行查询,返回$query->toArray()

目前,我在控制器方法中手动调用它,如下所示:

$RevisionFilters = TableRegistry::getTableLocator()->get('RevisionFilters');
$data = $RevisionFilters->findRegulatoryNotifications(...);

它返回所有正确的数据,但不分页。例如,如果有 55 行,我会得到一个包含 55 个键的数组。

我传入的参数适用于findRegulatoryNotifications()的签名

我已经在文档中阅读了有关使用分页和自定义查找器的信息 https://book.cakephp.org/3.0/en/controllers/components/pagination.html#using-controller-paginate

但是我看不到如何在我的控制器中执行此操作。

文档以这个为例:

$this->paginate = [
'finder' => [
'tagged' => $customFinderOptions
]
];

所以我想我可以做这样的事情:

$RevisionFilters->paginate = [
'finder' => [
'regulatoryNotifications' => $customFinderOptions
]
];

我不明白在这种情况下应该将$customFinderOptions设置为什么。

假设我可以克服这一点,那么我将如何将我的论点传递给findRegulatoryNotifications()

无法提供比这更多的代码,因为我不知道如何设置它。

这不是 finder 方法应该的样子,finder 只接受两个参数,第一个是查询本身,第二个是选项数组(传递给Query::find()的第二个参数(,这就是$customFinderOptions在该示例中的内容,一个选项数组。

你只有一个表方法,如果你想用它来分页,该方法需要返回一个查询对象,你将手动调用该方法并将其返回值传递给分页器。

参见

  • Cookbook> Database Access & ORM> Reretrievaling Data & Results Set> Custom Finder 方法
  • 使用控制器>分页>的食谱::p aginate((

最新更新