我有一个查询,它给我一个unix时间戳计算,选择表字段的日期时间值,然后添加表的另一个值。查询类似于以下内容:
SELECT UNIX_TIMESTAMP(DATE_ADD(mydatetimefield, INTERVAL m.myfield1 + m.myfield2 MINUTE)) FROM mytable AS m
此查询从phpMyAdmin正确执行但是当我尝试将它与Doctrine 2的createQueryBuilder方法一起使用时,我在“myfield”处收到错误。它似乎不支持INTERVAL关键字
之后的计算值Error: Expected Doctrine\ORM\Query\Lexer::T_COMMA, got 'm'
如何使用doctrine获得相同的查询结果?我使用querybuilder因为我有一些命名参数
答案 0 :(得分:3)
默认情况下,Doctrine不支持特定供应商的所有功能,例如DATE_ADD
。但是,您可以使用自定义函数。该链接有一个专门针对日期添加的示例。
Extending DQL in Doctrine 2: User-Defined Functions
另一个选项,取决于查询的复杂性,只是在应用程序代码中处理这个问题。如果您的mydatetimefield
实际上是日期时间,则Doctrine会将其转换为返回对象中的php DateTime
。
$myDateTimeField = $object->getMyDateTimeField();
$myDateTimeField->add(new DateInterval( $object->getMyField1() + $object->getMyField2() . 'M'));
最后,您也可以随时使用dbal
。
答案 1 :(得分:1)
不确定这是否是原因,但由于它抱怨缺少逗号你有m
别名,我怀疑它无法正确解析用户定义的函数。
您是否已将DATE_ADD
和UNIX_TIMESTAMP
定义为DQL User Defined Functions?有关详细信息,请参阅Date Add示例。