教义2 "group by"之前的"order by"



我知道3年前提出了类似的问题(doctrine2订购之前由小组订购),但也许从那时起发生了变化。

我有2个实体属性:

orderId
orderUpdateDate

两者都设置为唯一,但是对于列表,我需要最后更新日期,以便排序应为

order by orderUpdateDate DESC

然后按OrderId分组,所以我只有一次。

group by orderId

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

要达到这样的结果,您必须最终以plost 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;

不幸的是,学说的DQL不支持FROM子句中的嵌套查询。但是,它允许您创建一个可以由ORM映射的自定义本机SQL查询:

$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();

最新更新