Итак, если у вас есть что-то вроде этого:
Категория (идентификатор, имя) 1-N Продукты (идентификатор, имя, включено, видимый, количество, category_id) и:
categories:
id name
1 category1
2 category2
products:
id name enabled visible quantity category_id
1 prod1 1 1 1 1
2 prod2 1 1 2 1
3 prod3 1 1 3 1
4 prod4 1 1 1 2
5 prod5 1 1 2 2
Тогда я думаю, что вы должны начать с CategoryRepository
и:
public function getAll()
{
$qb = $this->createQueryBuilder('c');
$qb
->select('c.name')
->addSelect("(SELECT GROUP_CONCAT(p.name) FROM AppBundle:Product p WHERE p.category = c.id AND p.enabled = :enabled AND p.visible = :visible AND p.quantity >= :number) AS prods")
->setParameter('enabled', true)
->setParameter('visible', true)
->setParameter('number', 1)
;
return $qb->getQuery()->getResult();
}
Результаты будут выглядеть так:
array:2 [▼
0 => array:2 [▼
"name" => "category1"
"prods" => "prod1,prod2,prod3"
]
1 => array:2 [▼
"name" => "category2"
"prods" => "prod4,prod5"
]
]
Кроме того, вам нужно установить Bectlei's DoctrineExtensions , чтобы сообщить доктрине о функции GROUP_CONCAT