使用Doctrine计算关联实体时如何避免大量查询?

时间:2013-08-29 16:52:42

标签: mysql symfony doctrine-orm doctrine symfony-2.1

想象一个与User(多对多)关联的Group实体。我需要显示用户详细信息(以及 - 比如 - 组名称或组计数)。在我的控制器(Symfony 2)中,我可以获得所有用户:

$users = $this->em->getRepository('My\Entity\User')
    ->getAll();

// Assign $users to whatever the view engine
return $this->render('users.html.twig', array('users' => $users));

当然,默认情况下,作为LAZY关联,不会执行Group的JOIN操作。这在大多数时候都很好。

但是当我在我的视野中尝试获得小组计数时会发生什么?

{% for user in users %}
    {{ user.groups|length }}
{% endfor %}

结果是:为每个原始执行一个查询。也就是说,查询的数量等于用户的数量。 1000个用户(没有分页)会发生什么?

如何获取User类的所有关联实体(即只发出一个查询)?

1 个答案:

答案 0 :(得分:2)

您可以通过创建自定义存储库方法来加入实体。 更多信息 - > http://symfony.com/doc/master/book/doctrine.html#joining-related-records

相关问题