如何使用 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 方法。