Symfony和Doctrine:按时差排序

时间:2015-08-25 15:03:57

标签: symfony doctrine-orm

我正在尝试构建一个查询,从数据库中检索所有最近和即将发生的活动。

实体activity有一个名为date的字段DateTime。所以在我的存储库中,我正在考虑构建这样的东西:

$query = $repository
          ->createQueryBuilder('a');
$query->orderBy( 'DATEDIFF( a.date, NOW())' , 'ASC');
$query->setMaxResults( 6 );
return $query;

不幸的是我收到以下错误:

[Syntax Error] line 0, col 59: Error: Expected end of string, got '('

我的查询生成的Dql:

SELECT a FROM MyBundle\Entity\Activity a ORDER BY DATEDIFF( a.date, NOW()) ASC

我也尝试过安装beberlei/DoctrineExtensions,但要么它无​​法正常工作,要么我无法正确配置它。

有人有什么建议吗? 提前致谢

2 个答案:

答案 0 :(得分:0)

为什么不使用

$query = $repository
          ->createQueryBuilder('a');
$query->orderBy( 'DATEDIFF( a.date, CURRENT_TIMESTAMP())' , 'ASC');
$query->setMaxResults( 6 );
return $query;

答案 1 :(得分:0)

date_diff已经实现为Doctrine DQL语句,如here

所述

用作订购声明我建议您按照this文章

中的说明使用HIDDEN select关键字

所以你的DQL是这样的:

SELECT
    a,
    DATE_DIFF( a.date, CURRENT_TIMESTAMP() ) AS HIDDEN score
FROM MyBundle:Entity a
ORDER BY score

并在查询中添加最大结果。如果您需要帮助以适应查询构建器声明

,请告诉我

希望这个帮助