如何在 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((