【问题标题】:Count of no of record returned, without considering Limit cakePHP 3返回的记录计数,不考虑限制 cakePHP 3
【发布时间】:2017-07-25 23:29:38
【问题描述】:

我想要数据库中当前查询的可用记录数,但不考虑 LIMIT。

$this->Orders->find('all')
             ->where(['order_quantity']=>5)
             ->LIMIT(5);

让我们考虑一下,对于上述查询,我​​没有 50 条记录。所以只想要当前查询可用的记录数。我不能使用 'count()' 因为限制它总是返回可用记录的总数小于或等于 5。cakePHP 中是否有任何解决方案。

【问题讨论】:

  • 我假设你还没有真正尝试过? Counting 忽略限制、偏移等,查询对象仍然可用,因为内部计数使用查询的副本。

标签: cakephp cakephp-3.x pagination


【解决方案1】:

This page in the CakePHP 3 book,准确解释您的问题的答案,包括它的工作原理和原因:

返回记录总数

使用单个查询对象,可以获得总数 为一组条件找到的行数:

$total = $articles->find()->where(['is_active' => true])->count();

count() 方法将忽略limit、offset 和page 子句, 因此以下将返回相同的结果:

$total = $articles->find()->where(['is_active' => true])->limit(10)->count();

当您需要知道结果集的总大小时,这很有用 提前,而不必构造另一个 Query 对象。同样地, 使用时忽略所有结果格式和 map-reduce 例程 count() 方法。

请注意“...将忽略限制、偏移和页面子句”

所以试试这样的:

$data = $articles->find()->where(['is_active' => true])->limit(10);
$count = $data->count();

【讨论】:

  • 我也可以调用 $total 上的 count() 来获得相同的结果。实际上,我想要当前查询的可用记录数。考虑一下我有 50 个当前查询的结果,我想在每个页面中显示 5 条记录,并且我想向用户显示“这是总共 50 条中的 5 条”。希望你能明白我的意思。 @Rik.esh
  • 我相信我提供的(从书中)完全符合您的要求,现在再次解释。
  • 谢谢,@Dave。它只返回count,但我想要count和result_rows,这可能吗?
【解决方案2】:

我认为您不熟悉 find 中限制的使用。所以,我建议你研究一下docs

查询中的限制意味着即使查询实际上有 50 条数据,查询也只会显示前 5 条数据。

因此,为了获得实际数据,您只需要取消限制并在代码中进行一些更改,如下所示:

$this->Orders->find('count')->where(['order_quantity' => 5]);

【讨论】:

  • 我只想要 50 条记录中的 5 条记录,但我想向用户显示这是“50 条记录匹配,仅显示 5 条”。 @戴夫
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 2021-07-10
  • 2017-03-01
  • 2020-07-14
  • 2018-01-03
  • 2010-09-05
相关资源
最近更新 更多