Получение количества строк с учетом временных рамок

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

Я использую 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://локальный:8888/тезис/nbOfDefense/2003-02-01/2019-04-13

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

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

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

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

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

Ошибка, которую я имею прямо сейчас с этим кодом, следующая:

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

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

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

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

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

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

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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.htmlhttps://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html

Спасибо за ваш ответ! Когда я пробую ваш код, если даты равны нулю, он работает отлично. Но когда я пытаюсь установить даты (используя URL-адрес или написав $dateIn = "2003-02-01"; в начале моей функции), я получаю сообщение об ошибке: Аргумент 1 передается в App\Controller\ThesisController \::App\Controller\{closure}() должен быть экземпляром App\Controller\QueryExpression, заданным экземпляром Cake\Database\Expression\QueryExpression, вызываемым в .../cake3_7/vendor/cakephp/cakephp/src/ База данных/Query.php. Так что я не уверен, как я могу проверить это

createurx 10.04.2019 15:08

@createurx добавить: use Cake\ORM\Query;и use Cake\Database\Expression\QueryExpression;

Salines 10.04.2019 15:17

Боже мой! Да, это так, большое спасибо за вашу помощь!

createurx 10.04.2019 15:27

Другие вопросы по теме