2016-11-28 271 views
4

定義自定義的SQL查詢的實體內尋找好的做法,這裏=)是否有可能在Symfony3

基本上,我有一個實體,這是與elems的一個多對一的關係。

可以說我只想從我的實體中選擇一些元素。

我可以做

class Entity { 
    /* some vars here */ 
    public function getSpecificElems(){ 
     forEach($this->elems as $elem){ 
      /* do stuff here */ 
      if($someCondition){ $result[]=$elem;} 
     } 
     return $result; 
    } 

但是,這可能意味着大量數據時有鏈接到我的實體許多elems的獲取。另一種方式是

$em->getRepository("AppBundle:Repository")->getSpecificElems($entity); 

其中getSpecificElems執行DQL查詢。

我在這裏遇到問題:第一個解決方案對我來說更直觀,因爲它是OOP。第二個更快執行,但對我來說似乎不好。

有沒有一種方法來混合1)和2)以獲得$entity->getSpecificElems()返回我想執行良好SQL查詢的列表?

乾杯,

+0

2)是最好的解決方案 – DOZ

+0

把這個放入存儲庫絕對是過濾或分頁相關實體的方法,並且btw總是也是如此 –

+0

@johnSmith:爲什麼在使用EntityRepository時這個OOP獲取實體屬性而不是實體本身? –

回答

1

的實體內,您可以使用標準級過濾的ArrayCollection:

http://docs.doctrine-project.org/en/latest/reference/working-with-associations.html#filtering-collections

但如果你有存儲在數據庫的許多數據,因爲教義獲取所有這個解決方案不是最佳的數據,然後應用過濾器。最好的方法是使用Dql查詢過濾結果。

+0

正是我在找的東西。似乎根據@ johnSmith的評論在SQL級別執行過濾器。 謝謝=) –