Я читал о ленивых ассоциаций в Учении 2 и как я мог бы избежать следующей ситуации:Doctrine2 Ленивая Загрузка
В этом paragraph в документации объясняется, как включить ленивые ассоциации для вашей организации. Мне не хватает того, как я могу использовать это в моем репозитории объектов.
До сих пор я пытался внести некоторые корректировки в репозиторий объектов, но без каких-либо успехов. Я также пробовал this post, this post и this post, но они, похоже, справляются с ManyToMany или совершенно другой ситуацией.
Может ли кто-нибудь объяснить, как и где использовать ленивую ассоциацию, чтобы избежать приведенного выше примера?
Исключительные частные свойства и геттеры/сеттеры были удалены из этого фрагмента кода из-за длины.
SRC/AppBundle/Объект/news.php
class News
{
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Account", fetch="EXTRA_LAZY")
* @ORM\JoinColumn(name="author", referencedColumnName="id")
*/
private $author;
}
SRC/AppBundle/Объект/Хранилища/NewsRepository.php
class NewsRepository extends EntityRepository
{
/**
* @param $id
* @return mixed
* @throws \Doctrine\ORM\NonUniqueResultException
*/
public function findOneById($id) {
return $this->createQueryBuilder('a')
->andWhere('a.id = :id')
->setParameter('id', $id)
->getQuery()
->getOneOrNullResult();
}
}
SRC/AppBundle/Контроллер/NewsController .php
/**
* @Route("/{id}", name="news_item")
* @Method({"GET"})
* @Template("AppBundle:news:item.html.twig")
*/
public function articleAction(Request $request, $id)
{
$news_item = $this->getDoctrine()->getRepository('AppBundle:News')->findOneById($id);
if (!$news_item) {
throw $this->createNotFoundException('No news item found by id ' . $id);
}
return array(
'news_item' => $news_item
);
}
SRC/AppBundle/Ресурсы/мнения/Новости/item.html.twig
{% extends 'base.html.twig' %}
{% block body %}
{{ dump(news_item) }} }}
{% endblock %}
Я думаю, что 'dump (news_item)' делает прокси-решает автор. Попробуйте просмотреть журнал запросов в своей базе данных с дампом и без него. – user3557327