讓我先介紹一下本例中使用的實體: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對象並手動確定哪一個是最新的對象,或者我可以以某種方式預選?