Doctrine2在“group by”之前的“order by”

时间:2014-02-04 21:08:50

标签: symfony doctrine-orm dql

我知道3年前曾问过类似的问题(Doctrine2 Order By before Group By),但也许从那时起事情发生了变化。

我有2个实体财产:

orderId
orderUpdateDate

作为一对被设置为唯一,但是对于列表我需要上次更新日期,因此排序应该是

order by orderUpdateDate DESC

然后按orderId分组,所以我只有一次订单。

group by orderId

问题是,当我在查询构建器中的一个查询中粘贴时,我得到了订单的随机列表

1 个答案:

答案 0 :(得分:6)

要实现这样的结果,您必须最终得到以下 SQL 查询:

SELECT n.id, n.update_date
FROM (
    SELECT o.id, o.update_date
    FROM orders o 
    ORDER BY o.update_date DESC
) n 
GROUP BY n.id;

不幸的是,Doctrine的DQL不支持FROM子句中的嵌套查询。但是,它允许您创建可由ORM映射的自定义native SQL query

$rsm = new ResultSetMappingBuilder($em);
$rsm->addRootEntityFromClassMetadata('MyProject\\Order', 'o');

$sql = sprintf('SELECT %s FROM (SELECT ...) GROUP BY ...', $rsm->generateSelectClause());

$query = $em->createNativeQuery($sql, $rsm);
$result = $query->getResult();
相关问题