doctrine2 загружает связи «один ко многим» с режимом извлечения, используя слишком много запросов SQL
Я загружаю список многих организаций.
Эти объекты имеют связь «один ко многим» с другими объектами.
Я хочу загрузить все эти другие объекты в одном запросе SQL (вместо одного запроса для каждого объекта в первом списке).
Как описано в документации doctrine2:http://www.doctrine-project.org/docs/orm/2.1/en/reference/dql-doctrine-query-language.html#temporarily-change-fetch-mode-in-dql это должно быть возможно с загрузкой EAGER.
но это не работает, как описано.
мой код:
class User{
/**
* @ORM\OneToMany(targetEntity="Address", mappedBy="user", indexBy="id", fetch="EAGER")
*/
protected $addresses;
public function __construct(){
$this->addresses = new ArrayCollection();
}
}
class Address{
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="addresses")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="UserId", referencedColumnName="id")
* })
*/
private $user;
}
class UserRepository{
public function findUsersWithAddresses(){
return $this->getEntityManager()
->createQuery('SELECT u FROM MyBundle:User u ORDER BY u.name ASC')
->setFetchMode('MyBundle\Entity\User', 'addresses', \Doctrine\ORM\Mapping\ClassMetadata::FETCH_EAGER)
->setMaxResults(10)
->getResult();
}
}
Метод UserRepository :: findUsersWithAddresses () выполняет 11 SQL-запросов.
Как я могу сказать Doctrine использовать только один SQL-запрос для загрузки адресных сущностей?
Я использую:
Symfony v2.0.9общая доктрина 2.1.4доктрина-дбал 2.1.5учение 2.1.5