考虑时间范围获取行数
Getting the number of rows considering a time frame
考虑到时间范围,我想获得某个table的行数。
我正在使用 CakePHP 3.7。
在这里你可以看到我的代码(来自控制器class):
public function nbOfDefense($dateIn, $dateOut){
if($dateIn!=null && $dateFin!=null){
$conditions = array('thesis.date_end BETWEEN ? and ?' => array($dateIn, $dateOut));
$query = $this->Thesis->find('all',
array('conditions'=>$conditions));
die(strval($query->count()));
return $query;
}else{
$query = $this->Thesis->find('all');
die(strval($query->count()));
return $query->count();
}
}
我正在使用此 URL 通过我的浏览器测试我的功能:
http://localhost:8888/thesis/nbOfDefense/2003-02-01/2019-04-13
我想让我的函数做的是,获取两个日期的参数:
如果这两个日期不为空,考虑到您正在查询的 table 中存储的日期,您将获得这两个日期之间的行数。
如果日期为空,则得到 table 的总行数。
和 return 一个整数,它是这两个日期之间的行数。
我觉得这里的问题是我如何处理我的情况,因为计算总行数非常有效(代码的 else 部分)。
我现在使用此代码遇到的错误如下:
无法将 array
类型的值转换为字符串
它指向这一行:
die(strval($query->count()));
我猜计数函数 return 是一个数组(很奇怪,因为当我无条件地计算所有行时它不会)。我也试过这个:
die(strval(sizeof($query->count())));
但是我得到了和以前一样的错误(无法将数组转换为字符串)
我一定是遗漏了什么,但我不知道是什么...
尝试:
use Cake\ORM\Query;
use Cake\Database\Expression\QueryExpression;
class MyController extend AppController
{
public function nbOfDefense($dateIn = null, $dateOut = null)
{
$query = $this->Thesis->find();
if ($dateIn && $dateOut) {
$query->where(function (QueryExpression $exp, Query $q) use ($dateIn, $dateOut) {
return $exp->between('date_end', $dateIn, $dateOut);
});
}
$count = $query->count();
$this->set(compact('query', 'count'));
}
// ..
}
并阅读:
https://book.cakephp.org/3.0/en/orm/query-builder.html
https://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html
考虑到时间范围,我想获得某个table的行数。
我正在使用 CakePHP 3.7。
在这里你可以看到我的代码(来自控制器class):
public function nbOfDefense($dateIn, $dateOut){
if($dateIn!=null && $dateFin!=null){
$conditions = array('thesis.date_end BETWEEN ? and ?' => array($dateIn, $dateOut));
$query = $this->Thesis->find('all',
array('conditions'=>$conditions));
die(strval($query->count()));
return $query;
}else{
$query = $this->Thesis->find('all');
die(strval($query->count()));
return $query->count();
}
}
我正在使用此 URL 通过我的浏览器测试我的功能:
http://localhost:8888/thesis/nbOfDefense/2003-02-01/2019-04-13
我想让我的函数做的是,获取两个日期的参数:
如果这两个日期不为空,考虑到您正在查询的 table 中存储的日期,您将获得这两个日期之间的行数。
如果日期为空,则得到 table 的总行数。
和 return 一个整数,它是这两个日期之间的行数。
我觉得这里的问题是我如何处理我的情况,因为计算总行数非常有效(代码的 else 部分)。
我现在使用此代码遇到的错误如下:
无法将 array
类型的值转换为字符串
它指向这一行:
die(strval($query->count()));
我猜计数函数 return 是一个数组(很奇怪,因为当我无条件地计算所有行时它不会)。我也试过这个:
die(strval(sizeof($query->count())));
但是我得到了和以前一样的错误(无法将数组转换为字符串)
我一定是遗漏了什么,但我不知道是什么...
尝试:
use Cake\ORM\Query;
use Cake\Database\Expression\QueryExpression;
class MyController extend AppController
{
public function nbOfDefense($dateIn = null, $dateOut = null)
{
$query = $this->Thesis->find();
if ($dateIn && $dateOut) {
$query->where(function (QueryExpression $exp, Query $q) use ($dateIn, $dateOut) {
return $exp->between('date_end', $dateIn, $dateOut);
});
}
$count = $query->count();
$this->set(compact('query', 'count'));
}
// ..
}
并阅读:
https://book.cakephp.org/3.0/en/orm/query-builder.html https://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html