我知道3年前曾问过类似的问题(Doctrine2 Order By before Group By),但也许从那时起事情发生了变化。
我有2个实体财产:
orderId
orderUpdateDate
作为一对被设置为唯一,但是对于列表我需要上次更新日期,因此排序应该是
order by orderUpdateDate DESC
然后按orderId分组,所以我只有一次订单。
group by orderId
问题是,当我在查询构建器中的一个查询中粘贴时,我得到了订单的随机列表
答案 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();