2015-11-27 2 views
2

Скажем, на моей индексной странице я хотел бы отобразить все мои категории, их подкатегории и количество продуктов, которые есть в каждой категории.Symfony2 сводит к минимуму запросы при отображении в twig

Когда у меня много объектов, количество запросов становится огромным. Я уже уменьшил счет на тройку, используя Querybuilder, чтобы получить все категории. Тем не менее, есть множество запросов, когда я показываю все в ветке.

 {% for category in categories %} 
      {% if app.request.getLocale() == 'en' %} 
       <li class="subMenu" style="cursor:pointer;"><a> {{ category.name }}</a> 
        <ul> 
        {% for subcategory in category.children %} 
          <li><a href="{{ path('products_in_categories', {id: subcategory.id, name: subcategory.name}) }}">{{ subcategory.name }} [{{ countSubProducts(subcategory.id)}}]</a></li> 
        {% endfor %} 
        <li><a href="{{ path('products_in_categories', {id: category.id, name: category.name}) }}">{{ "category.show_all" | trans }} [{{ countCatProducts(category.id)}}]</a></li> 
        </ul> 
       </li> 
      {% else %} 
       <li class="subMenu" style="cursor:pointer;"><a> {{ category.nameEs }}</a> 
        <ul> 
         {% for subcategory in category.children %} 
          <li><a href="{{ path('products_in_categories', {id: subcategory.id, name: subcategory.nameEs}) }}">{{ subcategory.getNameEs }} [{{ countCatProducts(subcategory.id)}}] </a></li> 
         {% endfor %} 
         <li><a href="{{ path('products_in_categories', {id: category.id, name: category.nameEs}) }}">{{ "category.show_all" | trans }} [{{ countSubProducts(category.id)}}]</a></li> 
        </ul> 
       </li> 
      {% endif %} 
     {% endfor %} 

Как вы можете видеть, что я делаю, выделяют для петель, потому что я не знаю, какой-либо другой способ отображения каждой категории/subategory.

Эти циклы делают выделение запросов ... Как я могу уменьшить все это? Является ли это возможным?

ответ

0

Вы можете сделать что-то вроде этого:

Использование в twig attribute

{% set myname = "nameEs" %} 
{% if app.request.getLocale() == 'en' %} 
    {% set myname = "name" %} 
{% endif %} 

{% for category in categories %} 
     <li class="subMenu" style="cursor:pointer;"><a> {{ attribute(category, myname) }}</a> 
      <ul> 
       {% for subcategory in category.children %} 
        <li><a href="{{ path('products_in_categories', {id: subcategory.id, name: attribute(subcategory, myname)}) }}">{{ attribute(subcategory, myname) }} [{{ countSubProducts(subcategory.id)}}]</a></li> 
       {% endfor %} 
       <li><a href="{{ path('products_in_categories', {id: category.id, name: attribute(category, myname)}) }}">{{ "category.show_all" | trans }} [{{ countCatProducts(category.id)}}]</a></li> 
      </ul> 
     </li> 
{% endfor %} 
Смежные вопросы