【发布时间】:2018-03-14 14:22:13
【问题描述】:
CakePHP 3.x
根据docs
要限制行数或设置行偏移量,您可以使用
limit()和page()方法:
// Fetch rows 50 to 100
$query = $articles->find()
->limit(50)
->page(2);
它的作用是生成以下 SQL 查询的等价物:
LIMIT 50 OFFSET 50
我不知道你如何计算值 2 以传递给page()?根据评论,它说“获取第 50 到 100 行”。
但是用 100/50 来获得 2 并不是答案。
假设您要计算以下的page() 值?
LIMIT 250 OFFSET 250 // page(2)
LIMIT 250 OFFSET 500 // page(3)
LIMIT 250 OFFSET 750 // page(4)
LIMIT 250 OFFSET 1000 // page(5)
我已经发表了评论 - 进行了一些调试 - page() 的值是什么来生成这些 OFFSET 查询。
我在这里错过了什么吗?如果我们以最后一个例子LIMIT 250 OFFSET 1000 为例,你从哪里得到page() 的值5??
为了澄清,用于最后一个条件的 PHP 如下所示:
$query = $model->find()->limit(250)->page(5);
然后debug($query);会显示实际生成的SQL是
SELECT ... LIMIT 250 OFFSET 1000
鉴于许多库(例如 DataTables)只会为您提供 LIMIT (250) 和 OFFSET (1000) 的值,您应该如何计算 Cake 需要生成的 page() 值数据库的实际结果?
【问题讨论】:
-
你不需要...改用
offset()。 -
记录在哪里?我刚刚在我链接到的文档上搜索了
offset,但它不存在!不过它确实有效,非常感谢。 -
在 API 文档中:api.cakephp.org/3.5/class-Cake.Database.Query.html#_offset。 Cookbook 没有涵盖整个 API,但在这种情况下,如果示例也显示
offset()的用法也不会受到影响。 -
@ndm。由于食谱没有涵盖这个论点,我认为这条评论对其他人也可能有用,所以你为什么不把它作为答案呢?
-
@arilia 有时我在旅途中,只是留下一个简短的评论......有时 OP 在这种情况下会自己添加解决方案作为答案,有时不会,有时我稍后会添加一个。 ..如果您偶然发现这样的事情,请随意添加答案,除非有人指示自己添加答案,否则通常会受到赞赏:)
标签: php cakephp cakephp-3.0 cakephp-3.x