2017-03-06 61 views
0

我希望当前查询的数据库中没有可用的记录但没有考虑LIMIT。计数没有记录返回,没有考虑极限cakePHP 3

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

让我们考虑一下,我有50个这样的查询没有记录。所以只需要当前查询可用的记录数量。我不能使用'count()',因为它会一直返回总数no可用记录小于或等于5. CakePHP中是否有任何解决方案。

+0

我认为你还没有真正尝试它? [** Counting **](https://book.cakephp.org/3.0/en/orm/query-builder.html#returning-the-total-count-of-records)会忽略限制,偏移等,并且查询对象保持可用,因为内部计数使用查询的副本。 – ndm

回答

2

This page in the CakePHP 3 book,正好说明了回答你的问题,包括如何和为什么它的工作原理:

返回的记录

的总数使用单一的查询对象,它是POSS IBLE以获得找到的一组条件的行的总数 :

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

计数()方法将忽略限制,偏移和页条款, 因而下面将返回相同的结果:

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

当您需要知道 advance中的总结果集大小而无需构造另一个Query对象时,这非常有用。同样,使用 count()方法时,将忽略所有结果格式和map-reduce例程。

通知关于“......会忽略限制,偏移量和页面条款”

所以尝试这样的位:

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

我也可以调用$ total的count()来获得相同的结果。实际上,我希望当前查询没有可用的记录。考虑当前查询有50个结果,我想在每个页面中显示5条记录,并且我想要显示用户“这是总共50个中的5个”。希望你能明白我的观点。 @ Rik.esh –

+0

我相信我所提供的(从书中)完全符合你的要求,现在正在解释。 – Dave

+0

谢谢,@Dave。它只返回count,但我想count和result_rows,所以这可能吗? –

0

我不认为你熟悉在find中使用限制。所以,我建议你学习docs

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

因此,为了获得实际的数据,你只需要删除该限制,并在你的代码中的一些变化如下:

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

我只想从50个记录中找到5条记录,但我想向用户显示这是“50条记录匹配,仅显示5条”。 @Dave –