【问题标题】:Doctrine MongoDB load associated documents for performanceDoctrine MongoDB 加载相关文档以提高性能
【发布时间】:2014-09-20 12:51:59
【问题描述】:

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

用户:

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();

我在“项目”字段上使用count 方法

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

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

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

【问题讨论】:

    标签: php mongodb symfony doctrine-orm doctrine


    【解决方案1】:

    默认情况下,学说会进行一些延迟加载,例如在被请求之前它不会提取数据。如果您希望绕过延迟加载,您需要使用 fetch 连接而不是常规连接。

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

    这需要您编写自己的查询,因为“findAll()”不会成为您的朋友。

    【讨论】:

    • 这正是我想要实现的。您提供的链接是针对 ORM 学说的,可以用 ORM(MongoDB 而不是 SQL)来完成吗?
    • 试一试并找出答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2020-08-16
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多