CakePHP 3.x
根据docs
To limit the number of rows or set the row offset you can use the
limit()
andpage()
methods:
// Fetch rows 50 to 100
$query = $articles->find()
->limit(50)
->page(2);
它的作用是生成与以下 SQL 查询等效的内容:
LIMIT 50 OFFSET 50
我不知道如何计算要传递给 page()
的值 2?根据评论,它说“获取第 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()
值?
最佳答案
@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 中,因此值得检查两者。这是一个很好的例子。
关于php - 如何计算 CakePHP 3.x 中 page() 使用的 OFFSET 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49280163/