NicolaPez
NicolaPez

Reputation: 587

SQL Doctrine year's eve

that's is strange, maybe is my fault. Today I launch my test and 2 of they faults (yesterday dont). This test use a control date of some bookings, and I presume the problem is that today is 31/12. I'll show you the code:

$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();

That way is the only way i found to check that the booking have a date at today. Is possible that this fault becouse today is 31/12? Do you have some solution? sorry for bad english, thanks.

Upvotes: 0

Views: 64

Answers (2)

Hokusai
Hokusai

Reputation: 2359

You can calculate the dates by 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();

You can avoid var $booking and return result directly. Also you have missed ; at the end of createQuery and ORDER is ORDER BY.

Also beware with namespaces, maybe you must to use new \DateTime('now');

Upvotes: 2

Florian
Florian

Reputation: 873

CURRENT_DATE()+1 

returns

20161232

which seems to be pretty wrong. A way to make it works as you want it to would be this:

DATE_ADD(CURRENT_DATE(), INTERVAL 1 DAY);

which returns

2017-01-01

Upvotes: 1

Related Questions