我知道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();