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

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

0 голосов
/ 19 октября 2018

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

0 голосов
/ 19 октября 2018
$date = new \DateTime();
$year = $date->format('Y');

where('year = :year')->setParameter('year');
0 голосов
/ 19 октября 2018

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

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

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

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

->where('YEAR(i.interventionDate) = YEAR(CURRENT_DATE())');
...