Symfony Doctrine 优化

3
我在用户表和类别表之间建立了MN关系。当用户拥有超过100个兴趣时,问题就出现了。当我执行像这样非常简单的查询时:
  return $this->createQueryBuilder('usercategory')
        ->innerJoin('usercategory.user', 'u')
        ->innerJoin('usercategory.category', 'c')
        ->where('u.id = :user_id')
        ->setParameter('user_id', $user_id)
        ->getQuery()
        ->getResult();

Symfony分析器报告称,执行了100多个查询,执行时间超过150毫秒。其中90%的查询看起来像是:
SELECT t0.category_name AS category_name1,t0.type AS type2, t0.status AS status3,  t0.category_id AS category_id4, t0.parent_id AS parent_id5 FROM categories t0 WHERE t0.category_id = ?

这意味着,如果用户有100个类别,Doctrine将执行100个查询来获取它们所有的内容。
我做错了什么,我如何使用DQL使其更快?
谢谢, MIlos

4
使用 addSelect('c') 将导致查询中包含类别信息(而不是在需要时才加载它们)。 - Cerad
是的,就是这样。谢谢! - Milos
2
@Cerad,请将您的评论作为答案,这样我就可以接受它了。再次感谢! - Milos
1个回答

4
->addSelect('c') 

此查询将返回类别(而不是懒加载它们)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接