3
我有一個實體'Order'和一對多關聯實體'OrderStatus'(因此1個訂單可以有多個狀態)。訂單的當前狀態由添加到該訂單的最後一個狀態定義。基於1-n關聯中的1項屬性限制查詢結果
現在我想創建一個DQL查詢,它選擇所有具有特定狀態的訂單。但是,因爲這是一對多關係,所以我不知道如何在DQL中實現這一點。我只知道查詢整個狀態的集合。
有沒有人有想法,如果這甚至可能,或者我必須使用解決方法嗎?
我有一個實體'Order'和一對多關聯實體'OrderStatus'(因此1個訂單可以有多個狀態)。訂單的當前狀態由添加到該訂單的最後一個狀態定義。基於1-n關聯中的1項屬性限制查詢結果
現在我想創建一個DQL查詢,它選擇所有具有特定狀態的訂單。但是,因爲這是一對多關係,所以我不知道如何在DQL中實現這一點。我只知道查詢整個狀態的集合。
有沒有人有想法,如果這甚至可能,或者我必須使用解決方法嗎?
在我們正在進行的項目中,我們遇到了同樣的問題。您試圖執行的查詢與this question非常相似,只是您嘗試在DQL中執行此操作,這使得它更難。我認爲(但我可能是錯的),DQL不允許這種查詢,並且您可能會通過native SQL查詢獲得您期望的結果,這裏有所有的注意事項。
我們最終得到的結果是,我強烈建議您將當前狀態設置爲Order
的屬性。這允許簡單的&快速查詢,無需連接。這種變化是真正無痛:
class Order
{
/**
* @ManyToOne(targetEntity="OrderStatus")
*/
protected $status;
/**
* @OneToMany(targetEntity="OrderStatus")
*/
protected $statuses;
public function setStatus($status)
{
$orderStatus = new OrderStatus($this, $status);
$this->statuses->add($orderStatus);
$this->status = $orderStatus;
}
}
$status
也可以是一個簡單的string
屬性,如果你OrderStatus
基本上是由一個狀態字符串和日期;該代碼將變成:
class Order
{
/**
* @Column(type="string")
*/
protected $status;
// ...
public function setStatus($status)
{
// ...
$this->status = $status;
}
}