2011-11-28 43 views
3

我有一個實體'Order'和一對多關聯實體'OrderStatus'(因此1個訂單可以有多個狀態)。訂單的當前狀態由添加到該訂單的最後一個狀態定義。基於1-n關聯中的1項屬性限制查詢結果

現在我想創建一個DQL查詢,它選擇所有具有特定狀態的訂單。但是,因爲這是一對多關係,所以我不知道如何在DQL中實現這一點。我只知道查詢整個狀態的集合。

有沒有人有想法,如果這甚至可能,或者我必須使用解決方法嗎?

回答

3

在我們正在進行的項目中,我們遇到了同樣的問題。您試圖執行的查詢與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; 
    } 
}