Скажем, у меня есть два объекта в моем проекте Symfony2: Category
и Article
(категория, содержащая много статей).
В моем CategoryRepository
у меня есть этот метод:
findAllDummy(){
return $this->createQueryBuilder('c')
->leftJoin('c.Articles a')
->getQuery()->getResult();
}
Если я хорошо помню, в Symfony1.4 (и соответствующей версии Doctrine) возвращенные объекты будут иметь свой атрибут «статьи», заполненный соответствующими Article
объектами.Теперь в Symfony2 возвращаются объекты Proxy.
Так что, если я переберу статьи определенной категории, будет выполнено столько же запросов, сколько итераций.
foreach($category->getArticles() as $article){
echo $article->getDoctrine()
->getRepository('')getTitle();
}
Я понимаю, что это Doctrine2.Режим ленивой загрузки по умолчанию 1.
Вопрос 1: как это лучшее решение?N запросов вместо 1.
Я попытался форсировать загрузку, выполнив следующее:
findAllDummy(){
return $this->createQueryBuilder('c')
->leftJoin('c.articles a')
->getQuery()
->setFetchMode('Category', 'articles', 'EAGER')
->getResult();
}
Но результат остался прежним.
Вопрос 2: как заставить загружаться в Doctrine2?