У меня есть отношение Category
и Product
(один ко многим).Я хочу отобразить список всех категорий и объектов, связанных с ними.Если я использую:
$categories = $this->getDoctrine()->getRepository('AcmeZebraBundle:Category')->findAll();
И затем отобразить это так:
<ul>
{% for category in categories %}
<li>{{ category.name }}</li>
<ul>
{% for product in category.products %}
<li>{{ product.name }}</li>
{% endfor %}
</ul>
{% endfor %}
</ul>
Будет сгенерирован дополнительный запрос для каждой категории.Я пытался добавить товары в категории - вместо findAll()
я использовал метод, который извлекает все объекты и добавляет их в ArrayCollection
соответствующей категории.Но это не уменьшает количество запросов.
public function findAllLoadProducts()
{
$categories = $this->findAll();
$categortiesById = array();
foreach ($categories as $category)
{
$categortiesById[$category->getId()] = $category;
}
$products = $this->getEntityManager()->getRepository('AcmeZebraBundle:Product')->findAll();
foreach ($products as $product)
{
$categortiesById[$product->getCategory()->getId()]->getProducts()->add($product);
}
return $categortiesById;
}