Doctrine 2 DATE_ADD具有计算间隔值的mysql函数

时间:2012-11-21 22:20:48

标签: mysql doctrine-orm sql-date-functions

我有一个查询,它给我一个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因为我有一些命名参数

2 个答案:

答案 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_ADDUNIX_TIMESTAMP定义为DQL User Defined Functions?有关详细信息,请参阅Date Add示例。