Как я могу подсчитывать строки в запросе с предложением HAVING?
У меня есть запрос на получение данных с разбивкой на страницы, как показано ниже (но немного сложнее):
$qb = $this->em->createQueryBuilder()
->select('p')
->from('Application\Entity\Modules_ProductVersions', 'p', 'p.id')
->leftJoin('p.stocks', 's')
->groupBy('p.id')
->having('SUM(s.stock) > 0');
$qb->setMaxResults($limit)
->setFirstResult($page * $limit);
Я хочу дополнительно подсчитать строки, например: (хотя это вызывает Ошибку: класс '(' не определен):
SELECT COUNT(x) FROM (
SELECT p.id
FROM Application\Entity\Modules_ProductVersions p
LEFT JOIN p.stocks s
GROUP BY p.id
HAVING SUM(s.stock) > 0
) x
Как легко это сделать, используя уже построенный запрос?
Мне удалось это с помощью сгенерированного SQL:
foreach($query->getParameters() as $param) {
$params[] = $param->getValue();
};
$count = $this->em->getConnection()->fetchColumn(
'SELECT COUNT(i) FROM ('.$query->getSQL().') i',
$params
);
Но я бы предпочел какой-нибудь метод QueryBuilder или хотя бы DQL.