是否可以在Symfony3中的实体内定义自定义SQL查询

时间:2016-11-28 11:01:08

标签: sql symfony

在这里寻找良好做法=)

基本上,我有一个实体,它与Elems的ManyToOne关系链接。

让我们说我只想从我的实体中选择一些元素。

我能做到

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

但是当有很多元素链接到我的实体时,这可能意味着大数据提取。另一种方式是

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

getSpecificElems执行DQL查询的位置。

我在这里遇到了一个问题:第一个解决方案对我来说更直观,因为它是OOP。第二个执行速度更快,但对我来说似乎很糟糕。

有没有办法混合1)和2)以使$entity->getSpecificElems()返回我想要执行良好SQL查询的列表?

干杯,

1 个答案:

答案 0 :(得分:1)

在实体内部,您可以使用Criteria类过滤ArrayCollection:

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

但是,如果您在db中存储了许多数据,则此解决方案未进行优化,因为Doctrine会获取所有数据,然后应用过滤器。最好的方法是使用Dql查询过滤结果。