2016-02-05 46 views
1

我有一個OneToMany關聯的實體。在這個關聯中,我定義了一個orderby,當我檢索它時,它工作正常。學說訂購許多協會和匹配標準

class client { 
    ... 
    /** 
    * @ORM\OneToMany(targetEntity="Reservation", mappedBy="client") 
    * @ORM\OrderBy({"reservation_date" = "DESC"}) 
    */ 
    protected $reservations; 

    .... 

    public function getReservations() 
    { 
     return $this->reservations; 
    } 

    .... 
} 

getReservations方法工作正常,它檢索由reservation_date場下令所有Reservations。但是,如果我加入這個方法:

public function getActiveReservations() { 
    $activeCriteria = Criteria::create() 
     ->where(Criteria::expr()->eq("active", true)); 

    return $this->getReservations()->matching($activeCriteria); 
} 

的匹配標準所有的結果,而不是由reservation_field有序。

如何在匹配標準後保留訂單?

+1

您可能需要*使用'Criteria :: orderBy'重新排序*。 – Yoshi

+0

是的,謝謝,如果我將' - > orderBy(array(「reservation_date」=> Criteria :: DESC))添加到條件定義中,我會得到有序的結果。但是,爲什麼它不保存訂單? –

+0

我想這是'匹配'如何處理「過濾」的副作用。如果你查看源代碼,你會發現它經歷了很多代碼,並且可能在某種程度上失去了最初的排序。 – Yoshi

回答

2

正如評論說,你可以使用Criteria::orderBy(array $orderings)

$activeCriteria = Criteria::create() 
    ->where(Criteria::expr()->eq("active", true)) 
    ->orderBy(array('reservation_date' => Criteria::DESC)); 

主義是很完整,也不要猶豫,打開類和嘗試,如果你不能在documentation找到答案這也非常完整。