2016-12-31 2 views
0

Это странно, может быть, это моя вина. Сегодня я запускаю свой тест и 2 из них ошибаются (вчера не было). В этом тесте используется контрольная дата некоторых заказов, и я предполагаю, что проблема в том, что сегодня 31/12. Я покажу вам код:SQL Год доктрины

$em = $this->getEntityManager(); 
     $query = $em->createQuery(
      'SELECT b 
      FROM AppBundle:Booking b 
      WHERE b.bookingDate >= CURRENT_DATE() 
      AND b.bookingDate <= CURRENT_DATE()+1 
      ORDER ASC b.bookingDate' 
     ) 

     return $booking = $query->getResult(); 

Таким образом, это единственный способ я нашел, чтобы проверить, что бронирование есть дата на сегодняшний день. Возможно ли, что эта ошибка сегодня составляет 31/12? У вас есть какое-то решение? извините за плохой английский, спасибо.

+0

Пожалуйста, добавьте который DB вы используете. Вставьте текст ошибки. –

+0

@ LucioM.Tato Я использую MySql. У меня нет ошибки, но моя ошибка теста. Этот код shoud найти 2 бронирования с сегодняшнего дня (31/12), но не нашел, что. Вчера тест показал, что 2 бронирования с датой вчера (30/12) – NicolaPez

+0

Я думаю, что «WHERE b.bookingDate> = CURRENT_DATE() И b.bookingDate <= CURRENT_DATE() + 1" имеют проблемы с 31/12- 1/1 – NicolaPez

ответ

1
CURRENT_DATE()+1 

возвращает

20161232 

, который, кажется, довольно неправильно. Способ сделать это работает, как вы хотите, чтобы это было бы так:

DATE_ADD(CURRENT_DATE(), INTERVAL 1 DAY); 

который возвращает

2017-01-01 
+0

сегодня мой код работает, и я предполагаю, что проблема не в том, что вы думаете, потому что я не вижу ошибку в 31/10, только 31/12. Но я вставляю дату, такую ​​как DATE_ADD (CURRENT_DATE(), 1, 'day'), я думаю, лучше, чем раньше – NicolaPez

2

Вы можете рассчитать дату по Php:

$today = new DateTime('now'); 
$tomorrow = new DateTime('tomorrow'); 

$em = $this->getEntityManager(); 
$query = $em->createQuery(
      'SELECT b 
      FROM AppBundle:Booking b 
      WHERE b.bookingDate >= :today 
      AND b.bookingDate < :tomorrow 
      ORDER BY b.bookingDate ASC' 
); 

return $query->setParameters(array(
    'today' => $now->format('Y-m-d'), 
    'tomorrow' => $tomorrow->format('Y-m-d') 
))->getResult(); 

Вы можете избежать var $booking и вернуть результат напрямую. Также вы пропустили ; в конце createQuery и ЗАКАЗ ПОРЯДОК.

Также остерегайтесь с пространствами имен, может быть, вы должны использовать new \DateTime('now');