在这里寻找良好做法=)
基本上,我有一个实体,它与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查询的列表?
干杯,
最佳答案 在实体内部,您可以使用Criteria类过滤ArrayCollection:
但是,如果您在db中存储了许多数据,则此解决方案未进行优化,因为Doctrine会获取所有数据,然后应用过滤器.最好的方法是使用Dql查询过滤结果.