Symfony 4 DQL — запрос возвращает ноль

У меня есть объект Booking со свойством bookingStart.

/**
 * @ORM\Column(type = "datetime")
 */
private $bookingStart;

Я создаю объект с именем $filledSlots, который содержит все бронирования в $bookingRepository, соответствующие данному дню.

$today = (new \DateTime())->setTime(0,0);
$filledSlots = $bookingRepository->getBookingsForDay($today);

Я создал метод для запроса таблицы Bookings:

function getBookingsForDay(\DateTime $day) {

    //Build query
    return $this->createQueryBuilder('b')
        ->andWhere('b.bookingStart = :val')
        ->setParameter('val', $day)
        ->getQuery()
        ->getResult();
}

Но когда я сбрасываю $filledSlots, он пуст:

ProfileController.php on line 60:
[]

У меня определенно есть по крайней мере одно бронирование в базе данных на сегодняшнюю дату. Разве запрос не корректен, чтобы найти все по текущему дню?

Если вам нужно хранить только дату, без времени - лучше использовать тип date для столбца, а не datetime

Flying 29.01.2019 10:55

Мне понадобится время, так как заполненные слоты будут заполнять ежедневное расписание 12 30-минутными слотами.

TimothyAURA 29.01.2019 12:05

Затем вам нужно использовать диапазон дат, как написал @Yoshi в своем ответе.

Flying 29.01.2019 14:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
125
1

Ответы 1

Я предполагаю, что сохраненный объект имеет значение даты и времени с часами/минутами и тому подобное. Таким образом, вам нужно попасть именно в это время, чтобы получить результат.

Вы можете попробовать одно или несколько из следующих действий:

  • используйте date вместо даты и времени

  • запрос в формате, совместимом с базой данных, например.

    ->setParameter('val', $day->format('Y/m/d'))
    
  • попробуйте найти даты между определенной датой, например. ->andWhere('b.bookingStart BETWEEN :start AND :end') с указанием start как today 00:00:00 и end как today 23:59:59 (псевдозначения!)


Также вы можете проверить, как устанавливается $bookingStart. Если это просто:

 $this->bookingStart = new \DateTime('now'); // or similar

у вас будет доля времени в БД.

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