Therefore, the simplest yet most limiting advice is to avoid collection-valued associations whenever they are not strictly necessary.
В репозитории сущности Category создаете метод типа getCategory, где создаете подобный запрос.
Вот только сортировка и количество разных под-коллекций одним запросом не получится.
Как вариант - потом делать пагинацию и фильтрацию полученного результата.
конечно создается огромное количество запросов к БД, но по другому и не выбрать такую коллекцию данных (пользовательские переменные не в счет, в постгресе например их вовсе нет). Теперь я вот думаю, а это нормально иметь такие методы в entity:
$entityManager = $this->getServiceManager()->get('Doctrine\ORM\EntityManager');
$categoryRepository = $entityManager->getRepository('Database\Entity\Category');
$testCategories = $categoryRepository->findAll();
$viewModel->setVariables(['testCategories' => $testCategories]);
<ol>
{% for testCategory in testCategories %}
<li>
{{ testCategory.getShortName() }}
<ol>
{% for categoryHasProduct in testCategory.getCategoryHasProducts() %}
<li>
{{ categoryHasProduct.getProduct().getShortName() }}
</li>
{% endfor %}
</ol>
</li>
{% endfor %}
</ol>