Скажем, у меня есть два объекта в моем проекте Symfony2: Category
и Article
(категория, имеющая много статей).
В моем CategoryRepository
у меня есть этот метод:
findAllDummy(){
return $this->createQueryBuilder('c')
->leftJoin('c.Articles a')
->getQuery()->getResult();
}
Если я хорошо помню, в Symfony1.4 (и соответствующей версии Doctrine), возвращаемые объекты будут иметь свой атрибут "articles", заполненный соответствующими объектами 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?