Доктрина MongoDB загружает связанные документы для выполнения

У меня есть некоторые пользовательские документы, которые ссылаются на многие предметы.

Пользователь:

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? Я хотел бы, чтобы это делалось только при необходимости (не в определении сущности, а на уровне запроса).

0

Решение

По умолчанию доктрина выполняет ленивую загрузку, например он не извлекает данные, пока не будет запрошен. Если вы хотите обойти ленивую загрузку, вам нужно получить соединение вместо обычного соединения.

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

Это требует от вас написать собственный запрос, так как «findAll ()» не будет вашим другом.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]