У меня возникли проблемы с 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();
Но я получаю
[Doctrine\ORM\Query\QueryException] [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/
DATE_FORMAT
вместе с связкой функции Mysql напрямую не доступны в Doctrine.
Чтобы использовать их, вы можете либо создать свой собственный, либо добавить расширение, например 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-> Формат ( 'Ут-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