让我先介绍一下本例中使用的实体:Doctrine2查询哪里会需要子查询
Order (_order in mysql)
$id (primary key, auto increment)
OrderStatus (order_status in mysql)
$id (primary key, auto increment)
$order (storing the order object it is related to, named order_id in mysql)
$statuscode (Storing the integer code)
$created_at (Storing the datetime of creation)
的关系是Order n:1 OrderStatus
。对于每个状态更改,我使用新的状态码创建一个新的OrderStatus。所以对于一个订单,可以有许多OrderStatus。实际的OrderStatus可以通过查看具有最新的created_at的OrderStatus来计算出来。
我现在想要获取所有状态为0的对象。在SQL中,我的查询如下所示:
SELECT o.id,os.statuscode,os.created_at
FROM `_order` o
LEFT JOIN `order_status` os ON o.id = os.order_id
WHERE os.created_at = (SELECT MAX(created_at)
FROM order_status
WHERE order_id = os.order_id);
我可以在DQL中做这样的查询吗?还是必须使用对象?如果是这样,我是否需要阅读所有OrderStatus对象并手动确定哪一个是最新的对象,或者我可以以某种方式预选?