Текущий год с Доктриной
Я пытался установить текущий год в конструкторе запросов в условиях 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');