Получение количества строк с учетом периода времени
Я хочу получить количество строк определенной таблицы, учитывая временные рамки.
Я использую CakePHP 3.7.
Здесь вы можете увидеть мой код (из класса контроллера):
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
Я хочу, чтобы моя функция получала в параметрах две даты:
Если эти две даты не равны нулю, вы получите число строк между двумя датами с учетом даты, сохраненной в таблице, с которой вы консультируетесь.
Если даты нулевые, то вы получите общее количество строк таблицы.
И вернуть int, которое является числом строк между этими двумя датами.
Я чувствую, что проблема здесь в том, как я справляюсь со своим состоянием, потому что подсчет общего количества строк работает отлично (остальная часть кода).
У меня сейчас ошибка с этим кодом:
Невозможно преобразовать значение типа array
нанизывать
это указывает на эту строку:
die(strval($query->count()));
Я предполагаю, что функция count возвращает массив (странно, потому что это не так, когда я считаю все строки без условий). Я также попробовал это:
die(strval(sizeof($query->count())));
Но я получаю ту же ошибку, что и раньше (не могу преобразовать массив в строку)
Я должен что-то упустить, но я не знаю, что...
1 ответ
Пытаться:
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