Doctrine MongoDB加载相关文档以提高性能

时间:2014-09-20 12:51:59

标签: php mongodb symfony doctrine-orm doctrine

我有一些用户文档引用了很多项目。

用户:

class User
{

    //...

    /**
     * @ODM\ReferenceMany(targetDocument="Item", mappedBy="user", cascade={"remove"})
     */
    protected $items;

     //...

档案:

class Item
{

    /**
     * @ODM\ReferenceOne(targetDocument="User", inversedBy="items")
     */
    protected $user;

我想显示包含项目数的所有用户的列表。所以我有一个问题:

    $users = $dm->getRepository('Acme:User')->findAll();

我在“items”字段中使用count方法

    {% for user in users %}
            // ...
            {{ document.items.count }} items
            // ...
    {% endfor %}

问题是 Doctrine会为每个用户创建一个新请求,这会导致内存限制和超时。

有没有办法告诉doctrine在执行findAll请求时加载所有项目?我希望这只在需要时完成(不是在实体定义中,而是在查询级别)。

1 个答案:

答案 0 :(得分:0)

默认情况下,doctrine执行一些延迟加载,例如在请求之前,它不会提取数据。如果你想绕过延迟加载,你需要一个获取连接而不是常规连接。

http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html#joins

这要求您将自己的查询编写为" findAll()"不会是你的朋友。