Текущий год с Доктриной

Я пытался установить текущий год в конструкторе запросов в условиях where с Doctrine 2, но это невозможно. С My SQL все в порядке, но с Doctrine ничего не поделаешь, не работает. Так может кто-нибудь помочь мне об этом?

Я попробовал (Один за другим):

->where('year = CURRENT_TIMESTAMP()')

->where('SUBSTRING(i.interventionDate),1,4) = CURRENT_DATE()')

->where('Year(i.interventionDate) = YEAR(CURDATE()')

->where($qb->expr()->gt('i.interventionDate', 'CURRENT_TIMESTAMP()'))

->where('SUBSTRING(i.interventionDate), 1,4) =  CURRENT_TIMESTAMP()')

Спасибо за продвижение

2 ответа

Решение

Некоторые функции Date в MySQL зависят от платформы, а Doctrine - это абстракция для нескольких платформ. Вот почему они не поддерживают, например, YEAR() функционировать из коробки. Вы можете написать свою собственную логику или использовать https://github.com/beberlei/DoctrineExtensions, чтобы добавить эти и другие специфичные для mysql возможности в вашу настройку. Установите пакет, а затем в своей конфигурации доктрины в config.yml добавьте новые типы dql, сопоставив имя функции с соответствующим классом следующим образом:

doctrine:
    orm:
        dql:
            datetime_functions:
                date: DoctrineExtensions\Query\Mysql\Date
                ...

или используйте файл конфигурации из библиотеки.

После этого вы можете написать запрос для преобразования текущей даты и даты в вашей таблице в год и сравнить их следующим образом:

->where('YEAR(i.interventionDate) = YEAR(CURRENT_DATE())');
$date = new \DateTime();
$year = $date->format('Y');

where('year = :year')->setParameter('year');
Другие вопросы по тегам