当我使用以下查询(第2条原则)时,出现错误,无法在查询中使用INTERVAL,
$qb->andWhere("(pv.appointment_date + INTERVAL 48 HOUR) >= UTC_TIMESTAMP()");
错误:预期的学说\ ORM \ Query \ Lexer :: T_CLOSE_PARENTHESIS,得到了'48'“
答案 0 :(得分:3)
如果要在mysql comumn字段上使用INTERVAL(在教义2,DQL中),则可以按以下方式使用
$qb->andWhere("DATE_ADD(pv.appointmentDate,48,'hour') >= UTC_TIMESTAMP()");
它将打印如下的SQL,
...... DATE_ADD(p0_.appointmentDate, INTERVAL 48 HOUR) >= UTC_TIMESTAMP() .....
答案 1 :(得分:2)
Doctrine是使用DQL的ORM,它与SQL不同。默认情况下,doctine并不支持sql中的所有功能。 DQL不附带对INTERVAL的支持。为此,您必须添加用户定义的函数DQL User Defined Functions。
此git repo DoctrineExtensions
中提供了一组完整的功能以上查询将变为DATE_ADD(pv.appointment_date, INTERVAL 48 HOUR) >= UTC_TIMESTAMP()