Doctrine querybuilder формат даты не работает

у меня возникли проблемы с DATE_FORMAT внутри createQueryBuilder

мой код:

$qb7Days = $repo->createQueryBuilder('R')
        ->select( 'R.createdAt' )
        ->where( "DATE_FORMAT(R.createdAt, '%Y-%m-%d') = :afterDays" )
        ->andWhere( 'R.cCurrentReviewState = :state' )
        ->andWhere( 'R.reminder = :reminder' )
        ->setParameter( 'afterDays', $after7Days )
        ->setParameter( 'state',  $oReviewStateNotVerified ) // not_verified
        ->setParameter( 'reminder',  0 ) // never sent any reminder
        ->orderBy( 'R.id', 'ASC' )
        ->getQuery();

но я

 [DoctrineORMQueryQueryException]                                              
 [Syntax Error] line 0, col 7: Error: Expected known function, got 'DATE_FORMAT'

Я искал некоторые ссылки и нашел некоторые объяснения, что он должен работать таким образом, но для меня похоже, что я делаю что-то неправильно.

http://www.uvd.co.uk/blog/labs/using-mysqls-date_format-in-doctrine-2-0/

4 ответов


DATE_FORMAT вместе с кучей функций Mysql непосредственно не доступны в доктрине.

чтобы использовать их, вы можете создать свой собственный или добавить расширение, как beberlei/DoctrineExtensions а затем добавьте соответствующую функцию в конфигурацию пакета доктрины, например

doctrine:
    dbal:
        ....
    orm:
        ....
        dql:
            string_functions:
                DATE_FORMAT: DoctrineExtensions\Query\Mysql\DateFormat

DATE_FORMAT не является признанной функцией доктрины. Эта ссылка, которую вы вставили, - это пользовательский код, который автор написал для него, чтобы получить date_formate. Вы можете написать пользовательские функции в доктрине и зарегистрировать их , аккуратные Эй ?

вот пример того, как это сделать - http://symfony.com/doc/current/cookbook/doctrine/custom_dql_functions.html

Вариант 1: Вы пишете эту пользовательскую функцию для DATE_FORMAT, чтобы вы могли использовать ее снова и снова. Вариант 2: Может Быть отформатировать дату в PHP, чтобы соответствовать формату даты в базе данных , то вроде

$after7Days - > формат ('Y-m-d');


DATE_FORMAT не является Строковой функцией, его date_function:

config.в формате YML

doctrine:
     orm:
         dql:
             datetime_functions:
                 date_format: DoctrineExtensions\Query\Mysql\DateFormat

Я не уверен, но это правильно для меня только:

doctrine:
    orm:
        entity_managers:
            default:
                ...
                dql:
                    datetime_functions:
                        DATE_FORMAT: DoctrineExtensions\Query\Mysql\DateFormat