Получение количества строк с учетом периода времени - PullRequest
0 голосов
/ 10 апреля 2019

Я хочу получить количество строк в определенной таблице, учитывая период времени.

Я использую 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

Я хочу, чтобы моя функция получала в параметрах две даты:

  • Если эти две даты не равны нулю, вы получите количество строк, которыемежду двумя датами с учетом даты, хранящейся в таблице, с которой вы консультируетесь.

  • Если даты равны нулю, вы получите общее количество строк таблицы.

И вернуть целое число, представляющее собой число строк между этими двумя датами.

Я чувствую, что проблема в том, как я справляюсь со своим состоянием, потому что подсчет общего количества строк работает отлично (остальная часть кода).

У меня сейчас ошибка с этим кодом:

Невозможно преобразовать значение типа array в строку

оно указывает на эту строку:

die(strval($query->count()));

Полагаю, функция count возвращает массив (странно, потому что этого не происходит, когда я считаю все строки без условий).Я также попробовал это:

die(strval(sizeof($query->count())));

Но я получаю ту же ошибку, что и раньше (не могу преобразовать массив в строку)

Я должен что-то упустить, но я не знаю, что ...

1 Ответ

1 голос
/ 10 апреля 2019

Try:

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

...