2016-11-28 119 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级别执行过滤器。 谢谢=) –