Получение ошибки при использовании интервала в доктрине - PullRequest
2 голосов
/ 11 апреля 2019

Когда я использую запрос ниже (Doctrine 2), я получаю ошибку и не могу использовать INTERVAL в запросе,

$qb->andWhere("(pv.appointment_date + INTERVAL 48 HOUR) >= UTC_TIMESTAMP()");

Ошибка: ожидаемая доктрина \ ORM \ Query \ Lexer :: T_CLOSE_PARENTHESIS, получена '48' '

Ответы [ 2 ]

3 голосов
/ 11 апреля 2019

Если вы хотите использовать INTERVAL (в Doctrine 2, DQL) в поле столбца mysql, вы можете использовать, как показано ниже,

$qb->andWhere("DATE_ADD(pv.appointmentDate,48,'hour') >= UTC_TIMESTAMP()");

Он напечатает SQL, как показано ниже,

...... DATE_ADD(p0_.appointmentDate, INTERVAL 48 HOUR) >= UTC_TIMESTAMP() .....
2 голосов
/ 11 апреля 2019

Doctrine - это ORM, который использовал DQL, это не то же самое, что SQL.Не все функции в SQL по умолчанию поддерживаются doctine.DQL не поставляется с поддержкой INTERVAL.Для этого вам нужно добавить пользовательские функции DQL User Defined Functions .

Полный набор функций доступен в этом git-репо DoctrineExtensions

И вышеупомянутый запрос станет DATE_ADD(pv.appointment_date, INTERVAL 48 HOUR) >= UTC_TIMESTAMP()

...