在没有考虑限制cakePHP 3

时间:2017-03-06 07:25:41

标签: cakephp cakephp-3.x paginate

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

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

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

2 个答案:

答案 0 :(得分:2)

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();

答案 1 :(得分:0)

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

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

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

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