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)的值,您应如何计算page()
值Cake需要从数据库中生成实际结果吗?
答案 0 :(得分:2)
@ndm在评论中提供的答案是,有offset()
方法。
此方法没有详细记录 - 它没有出现在Cookbook中,但确实出现在API文档中:https://api.cakephp.org/3.5/class-Cake.Database.Query.html#_offset
所以,问题的答案是可以这样做:
$query = $model->find()->limit(250)->offset(1000);
值得注意的是,Cookbook没有记录每个功能。 API文档中出现了一些不在Cookbook中的内容,因此值得同时检查。这是这样一个很好的例子。