【问题标题】:Pagination of query ignoring the LIMIT clause in CakePHP 3.xCakePHP 3.x 中忽略 LIMIT 子句的查询分页
【发布时间】:2016-04-19 14:28:18
【问题描述】:

我正在尝试创建一个仅返回 2 个结果的查询,并按照文档运行该查询,但默认情况下 limit 仍设置为 20

以下是查询的构建方式:

$upcomingMeetings = $this->Meetings->find('all')
  ->where(['Meetings.user_id' => $this->Auth->User('user_id')])
  ->andWhere(["Meetings.date >= " =>  date('Y-m-d') ])
  ->order(['Meetings.date' => 'ASC'])
  ->limit(2);

结果被传递给视图,如下所示:

$this->set('upcomingMeetings', $this->paginate($upcomingMeetings)); 

这是正在数据库上运行的查询:

SELECT 
  Meetings.id AS `Meetings__id`, 
  Meetings.date AS `Meetings__date`, 
  Meetings.user_id AS `Meetings__user_id`, 
FROM 
  meetings Meetings 
WHERE 
  (
    Meetings.group_id = 7 
    AND Meetings.date >= '2016-01-14'
  ) 
ORDER BY 
  Meetings.date ASC 
LIMIT 
  20 OFFSET 0

非常感谢任何帮助或指导。

【问题讨论】:

  • 没有默认限制,除非您使用例如分页器。如果是这种情况,请提及并显示有关分页配置的相关代码。
  • 应该可以。您确定您实际上正在执行您向我们展示的代码吗?您是否在其他任何地方对$upcomingMeetings 进行了任何修改?您能否发布您在调试工具包中看到的已执行 SQL 查询?
  • 非常感谢您的快速回复。我刚刚用您要求的信息更新了问题。

标签: cakephp orm pagination cakephp-3.0


【解决方案1】:

当对Query 对象进行分页时,CakePHP 将忽略limit() 子句,而使用$paginate 配置数组中定义的值。

这是查看the source code后可以得出的结论。

尝试将以下内容添加到您的控制器:

public $paginate = [
    'limit' => 2,
];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多