3

我有一个查询,它给我一个 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'

那么我怎样才能通过使用学说获得相同的查询结果?我使用查询构建器,因为我有一些命名参数

4

2 回答 2

3

默认情况下,Doctrine 不支持特定供应商的所有功能,例如DATE_ADD. 但是,您可以使用自定义函数。该链接有一个专门用于添加日期的示例。

在 Doctrine 2 中扩展 DQL:用户定义的函数

另一个选项,取决于查询的复杂性,只是在应用程序代码中处理这个问题。如果您mydatetimefield实际上是日期时间,Doctrine 会将其转换为DateTime返回对象中的 php。

$myDateTimeField = $object->getMyDateTimeField();
$myDateTimeField->add(new DateInterval( $object->getMyField1() + $object->getMyField2() . 'M'));

最后,您也可以随时使用dbal

于 2012-11-21T22:49:40.850 回答
1

不确定这是否是原因,但由于它抱怨您有m别名的地方缺少逗号,我怀疑它无法正确解析用户定义的函数。

您是否将DATE_ADDand定义UNIX_TIMESTAMPDQL 用户定义函数?有关更多详细信息,请参阅日期添加示例。

于 2012-11-21T22:47:27.740 回答