2017-03-16 150 views
0

我-roughly-有這樣的層次: -原則選擇/過濾器

class City { 

/** 
* @ORM\OneToMany(targetEntity="AppBundle\Entity\District", mappedBy="city") 
*/ 
private $districts; 
} 

class District { 

/** 
* @ORM\Column(type="boolean") 
*/ 
private $isRemoved; 

} 

,我試圖查詢的城市,但我不希望在查詢視圖中刪除區。 我目前的解決方案包括循環遍歷區域並檢查刪除的屬性,並從返回對象中刪除區域。

我的另一種選擇是寫使用查詢生成器從頭詳細的查詢,但用時可能會在這種情況下工作 - 變得成倍的層次加深更加複雜。

回答

0

在我看來很簡單,也許我沒有理解好,但讓試試看

$cities = $em->getRepository('AppBundle:City')->createQueryBuilder('c') 
    ->select('c', 'd') 
    ->leftJoin('c.districts', 'd') 
    ->where('d.isRemoved = 0') 
    ->getQuery()->getResult(); 

這應該給你相關的地區已經收集到isRemoved虛假的城市。

希望這會幫助你。

+0

謝謝你,但更深層次的層次結構,得到的結果在一個查詢就變得很麻煩。我想知道是否有方法來優化這個。也許我應該實施一個存儲庫方法來過濾兒童和兒童的孩子 –