Учение вызывает много запросов для отношений «один ко многим»

У меня есть приложение Symfony2 с Doctrine как ORM. В моем приложении у меня есть два объекта с отношениями «один ко многим». Единым объектом является User и многие объекты являются Item . Конфигурация их отношений ниже:

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

 oneToMany: items: targetEntity: App\Bundle\ItemBundle\Entity\Item fetch: EAGER mappedBy: user 

Пункт:

 manyToOne: user: targetEntity: App\Bundle\UserBundle\Entity\User fetch: EAGER inversedBy: items joinColumn: name: user_id referencedColumnName: id 

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

Сам запрос довольно прост:

  $entities = $em->getRepository('AppUserBundle:User')->findBy([], [], 30); 

Можно ли автоматически получать все связанные элементы для пользователей в одном запросе с помощью Doctrine?

Я использую SF 2.7.6 и доктринные библиотеки с версиями:

 doctrine/annotations v1.2.7 Docblock Annotations Parser doctrine/cache v1.5.1 Caching library offering an ob... doctrine/collections v1.3.0 Collections Abstraction library doctrine/common v2.5.1 Common Library for Doctrine pr... doctrine/dbal v2.5.2 Database Abstraction Layer doctrine/doctrine-bundle 1.6.0 Symfony DoctrineBundle doctrine/doctrine-cache-bundle 1.2.1 Symfony Bundle for Doctrine Cache doctrine/doctrine-migrations-bundle 1.1.1 Symfony DoctrineMigrationsBundle doctrine/inflector v1.0.1 Common String Manipulations wi... doctrine/instantiator 1.0.5 A small, lightweight utility t... doctrine/lexer v1.0.1 Base library for a lexer that ... doctrine/migrations v1.1.0 Database Schema migrations usi... doctrine/orm v2.5.1 Object-Relational-Mapper for PHP 

Related of "Учение вызывает много запросов для отношений «один ко многим»"

Вы можете создать метод в репозитории, который выполняет объединения, чтобы избежать дополнительных запросов. Можно заменить метод findBy своей собственной реализацией, но я предпочитаю создавать методы, которые более наглядны.

Хотя в примерах документации Symfony используется DQL , вы можете использовать QueryBuilder если хотите.

Я не думаю, что выбор желаемого результата – отличная идея в любом случае tbh.

Что-то вроде этого должно работать нормально:

 $users = $this->getEntityManager() ->createQueryBuilder()->select('u, i') // key is to select both entities ->from('YourBundle:User', 'u') ->join('u.item', 'i') ->getQuery()->getResult();