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

Sie*_*nne 5 sql symfony

在这里寻找好的做法 =)

基本上,我得到了一个实体,它与具有多对一关系的元素相关联。

假设我只想从我的实体中选择一些元素。

我可以

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

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

$em->getRepository("AppBundle:Repository")->getSpecificElems($entity);
Run Code Online (Sandbox Code Playgroud)

在哪里getSpecificElems执行 DQL 查询。

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

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

干杯,

小智 1

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

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

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