php - 如何计算 CakePHP 3.x 中 page() 使用的 OFFSET 值?

标签 php cakephp cakephp-3.0 cakephp-3.x

CakePHP 3.x

根据docs

To limit the number of rows or set the row offset you can use the limit() and page() 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/

相关文章:

php - 如何找到重叠的日期范围之间的其余部分

php - 不同的访问方式

javascript - CakePHP 模式在卸载后不显示 'DebugKit.Toolbar'

cakephp - 配置 cake bake 以启用级联删除

php - 具有匹配表/模型名称的 CakePHP 3 外键

php - Laravel 在 leftjoin 处分页

php - 通过 php "exec"挂载时出错

cakephp - Cakephp3 中 AppModel 的替换

php - cakephp 从一列中的字符串中选择多个字符串

php - 在cakephp中获取referer url(previous url)的 Action 名称