Cakephp 3同一模型多分页?

Cakephp 3同一模型多分页?,cakephp,controller,pagination,conditional-statements,cakephp-3.x,Cakephp,Controller,Pagination,Conditional Statements,Cakephp 3.x,我一直在做一个项目,遇到了一个问题:在CakePHP3中,一个视图需要对同一个模型在不同条件下进行两次分页 例如,在同一视图上列出的已打开和已关闭的支持票证 下面是我的代码。有人能帮我吗 //Opened status pagination $opened_paginate = [ 'contain' => ['Comments'], 'conditions' => [ 'AND' => ['SupportTickets.status' =>

我一直在做一个项目,遇到了一个问题:在CakePHP3中,一个视图需要对同一个模型在不同条件下进行两次分页

例如,在同一视图上列出的已打开和已关闭的支持票证

下面是我的代码。有人能帮我吗

//Opened status pagination
$opened_paginate = [
    'contain' => ['Comments'],
    'conditions' => [
        'AND' => ['SupportTickets.status' => '1']
    ],
    'order' => ['SupportTickets.id' => 'DESC'], 
    'limit' => 1
];   

// Closed status pagination  
$closed_paginate = [
    'contain' => ['Comments'],
    'conditions' => [
        'AND' => ['SupportTickets.status' => '2']
    ],
    'order' => ['SupportTickets.id' => 'DESC'],
    'limit' => 1
];                  

$this->set('opened', $this->Paginator->paginate(
    $this->SupportTickets->find(),
    $opened_paginate
));
$this->set('closed', $this->Paginator->paginate(
    $this->SupportTickets->find(),
    $closed_paginate
)); 

您可以在一个操作中对不同的模型进行分页(请参见),但我认为这在同一个模型上不起作用

也许你可以通过使用或这个或那个来构建一些奇怪的东西,但我建议你重新思考你正在尝试做什么,并且消除在一个视图中多次分页相同模型的需要

可以使用以下命令在单个控制器操作中对多个模型进行分页: 控制器的$paginate属性和中的范围选项 对paginate()方法的调用:

在这里我找到了答案。

在控制器中:

$this->loadModel('Members');
$paginator1 = $this->paginate(
    $this->Members->find()->where(['tag' => 1]), [
    'model' => 'Members',
    'scope' => 'scope1'
    ]
);

eval('namespace App\Model\Table;'
        . 'class Members2 extends \App\Model\Table\Members {}');
$this->loadModel('Members2');
$paginator2 = $this->paginate(
    $this->Members2->find()->where(['tag' => 2]), [
    'model' => 'Members2',
    'scope' => 'scope2'
    ]
);
他认为:

// first paginator
echo $this->Paginator->sort('title', ['model' => 'Members']);
// second paginator
echo $this->Paginator->sort('title', ['model' => 'Members2']);

您是否计划在视图上共享分页?由于
打开的
关闭的
可能有不同的页数,这可能会导致问题。使用AJAX为每个表发出分页请求可能会更好。使用不同的别名创建同一个表时,它应该会起作用。请考虑一下这一点。但是没有时间去测试。
// first paginator
echo $this->Paginator->sort('title', ['model' => 'Members']);
// second paginator
echo $this->Paginator->sort('title', ['model' => 'Members2']);