Symfony 优化级联连接查询生成器
我有一个QueryBuilder查询,正在运行,但非常贪婪。我想知道我是否可以优化它 这是我的实体设置: 我有n(一打)个项目(p),有n(可以是数千)个媒体(m),有1个转录(t),有n(可以是数千)个转录日志(l) 我想检索所有项目,按其最后的转录日志(createdAt属性)排序。我想有一些方法可以优化它,但我无法找到自己的方法Symfony 优化级联连接查询生成器,symfony,doctrine-orm,doctrine,symfony4,query-builder,Symfony,Doctrine Orm,Doctrine,Symfony4,Query Builder,我有一个QueryBuilder查询,正在运行,但非常贪婪。我想知道我是否可以优化它 这是我的实体设置: 我有n(一打)个项目(p),有n(可以是数千)个媒体(m),有1个转录(t),有n(可以是数千)个转录日志(l) 我想检索所有项目,按其最后的转录日志(createdAt属性)排序。我想有一些方法可以优化它,但我无法找到自己的方法 return $this->createQueryBuilder('p') ->select('p') -&g
return $this->createQueryBuilder('p')
->select('p')
->leftJoin('p.medias', 'm')
->leftJoin('m.transcription', 't')
->leftJoin('t.transcriptionLogs', 'l')
->andWhere('p.archived = 0')
->addOrderBy('l.createdAt', 'DESC')
->addOrderBy('p.id', 'DESC')
->getQuery()
->getResult();
谢谢 如果您对查询本身提出疑问,我看不出您可以如何对其进行更优化 但是,您可以优化其他代码使用它的方式。您可以通过向查询中添加一些
SELECT
来完成此操作。这样,当您在控制器或细枝中循环数据时,条令将有一个分组查询,而不是多个查询
这是您实现此目标的方法:
return $this->createQueryBuilder('p')
->leftJoin('p.medias', 'm')
// Joining the transcription and adding the select
->leftJoin('m.transcription', 't')
->addSelect('t')
// And doing the same for the logs
->leftJoin('t.transcriptionLogs', 'l')
->addSelect('l')
->andWhere('p.archived = 0')
->addOrderBy('l.createdAt', 'DESC')
->addOrderBy('p.id', 'DESC')
->getQuery()
->getResult()
;