【问题标题】:How to avoid a lot of queries when counting associated entities with Doctrine?使用 Doctrine 计算关联实体时如何避免大量查询?
【发布时间】:2013-08-29 16:52:41
【问题描述】:

想象一个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 %}

结果是:对每个 raw 执行一个查询。即查询的数量等于用户的数量。 1000 个用户(没有分页)会发生什么?

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

【问题讨论】:

  • EXTRA-LAZY 关联怎么样?

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-03-26
    • 2011-08-25
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多