我正在一个Cake PHP 2.10应用程序中工作,需要为我的模型使用Cake paginator,以便为最终用户提供分页视图。
我面临的问题是,我需要将其他模型加入到我的Application
模型中,比如ApplicationPayday
,其中每个模型都有数百万行。
我的系统中的用户不需要看到数以百万计的分页结果,也许只需要看到最后1000个。
我已经在Paginator设置中添加了一个limit
,但是Cake仍然从我的表中获取我的所有应用程序,我遗漏了什么?
// define pagination settings
$this->Paginator->settings = array(
'limit' => 50, // <-- doesn't seem to be limiting at all?
'maxLimit' => 5,
'joins' => array(
array(
'table' => 'tlp_application_paydays',
'alias' => 'ApplicationPayday',
'type' => 'inner',
'conditions' => array(
'ApplicationPayday.application_id = Application.id'
)
),
array(
'table' => 'tlp_application_types',
'alias' => 'ApplicationType',
'type' => 'inner',
'conditions' => array(
'ApplicationType.id = Application.application_type'
)
)
),
'order' => array(
'Application.id' => 'desc'
),
'recursive' => -1
);
// run query to get applications via paginated settings
$applications = $this->Paginator->paginate('Application');
我正在做文档中所说的一切,也就是在分页器设置中定义limit
,我在这里遗漏了什么?
1条答案
按热度按时间ubby3x7f1#
实际上,您需要对第二个表
ApplicationPayday
的联接进行限制。如果使用联接,则无法做到这一点。innerjoin
将选择所有匹配的数据。您应该使用
limit
在两个表之间创建一个hasMany
关系,如下所示。您可以使用bindModel
动态创建它,如下面的示例所示(如果它尚未在模型类中定义)。您可以阅读更多关于链接模型的信息:
https://book.cakephp.org/2/en/models/associations-linking-models-together.html#hasmany
containable
特性可以帮助您限制find
方法的返回值,而无需使用recursive
:https://book.cakephp.org/2/en/core-libraries/behaviors/containable.html