Ничто не может автоматически отключить это поведение и заставить вас писать предложения JOIN, кроме ваших пожеланий.
Это поведение (которое называется отложенной загрузкой) является одним из основных общих действий всех ORM.
Если вас это не устраивает (и у вас, вероятно, есть веские причины), подумайте о написании собственных запросов DQL, ограниченных выбранными вами полями.То, что не содержится в вашем запросе, не будет автоматически выбрано впоследствии.
Запишите этот метод в свой пользовательский класс PostRepository:
public function findAll(){
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('p')
->from('Post', 'p');
return $qb->getQuery()->getResult();
}
Затем в вашем контроллере вы можете сделать то же, что и раньше:
$posts = $em->getRepository(Post::class)->findAll();
foreach ($posts as $post) {
dump($post->getCategory()->getName();
}
Вызов метода getName()
из сущности Category
теперь вызывает ошибку и не запускает никаких скрытых SQL-запросов.Если вы хотите играть с сообщениями и категориями вместе, то вы можете адаптировать свой метод findAll()
следующим образом:
public function findAll(){
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('p, c')
->from('Post', 'p');
->join('p.category', 'c')
return $qb->getQuery()->getResult();
}