【发布时间】:2013-11-18 14:52:07
【问题描述】:
我在 USER 和 CATEGORY 表之间有 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 个类别,则学说将执行 100 个查询以获取所有类别。
我做错了什么吗?如何使用 DQL 使其更快?
谢谢, 米洛斯
【问题讨论】:
-
->addSelect('c') 将导致从您的查询中返回类别(而不是延迟加载它们)。
-
是的,就是这样。谢了!!!
-
@Cerad 请发表您的评论作为答案,以便我接受。再次感谢!
标签: php symfony doctrine-orm doctrine