【发布时间】:2016-10-18 17:01:30
【问题描述】:
我有一个教义查询,例如看起来像这样:
$object = $this->createQueryBuilder('object')
->leftJoin('object.element', 'element')->addSelect('element')
->leftJoin('object.element2', 'element2')->addSelect('element2')
->leftJoin('object.many', 'many')->addSelect('many')
->leftJoin('many.element3', 'element3')->addSelect('element3')
->leftJoin('many.element4', 'element4')->addSelect('element4')
->where('object.id = 1')
->getQuery()
->getSingleResult();
真正的查询有更多的连接,需要大量的内存,数据库性能不好。在本机 SQL 中,我会拆分它并正确加载它。我想要做的是加载第一个查询对象和一些基本的连接数据。这看起来像这样:
$object = $this->createQueryBuilder('object')
->leftJoin('object.element', 'element')->addSelect('element')
->leftJoin('object.element2', 'element2')->addSelect('element2')
->where('object.id = 1')
->getQuery()
->getSingleResult();
现在我还想加载many、many.element3 和many.element4。在单独的查询中。当我只使用教条延迟加载功能时,它会创建一个 SQL 查询 foreach 但我只希望它作为 1 个查询。
我知道可以在该关系上设置EAGER,但我只想为这个查询临时设置EAGER,并不总是在有人加入对象并访问它时。
【问题讨论】:
标签: sql performance symfony doctrine-orm doctrine