我想获取查询结果(限制为 10)+ 计算可能的结果。 我知道有类似的问题和答案。
例如这里
但是如果我尝试获取可能的行数(通过getSingleScalarResult()
),我将得到例外:The query returned multiple rows. Change the query or use a different result function like getScalarResult().
$query = $repository
->createQueryBuilder('t')
->select('COUNT(t.katId)', 't.hotel', 't.title', 't.desc', 'picture', 'MIN(t.price) AS price');
$query->where('t.visible = (:visible)')->setParameter('visible', 1);
// + some wheres, where in, more than....
$query->groupBy('t.hotel');
$query->setMaxResults(10);
echo $query->getQuery()->getSingleScalarResult();
exit();
我只需要一个整数表示我的查询的所有结果。 如何获取此计数数字?理想一枪打转。
编辑:
如果我删除$query->groupBy('t.hotel');
并在选择仅保留->select('count(t.katId)');
,那么它可以工作。 但我需要groupBy
,因为它可以真实地计算结果。
溶液
我将其分为两个查询,因此 - 为了获得结果,我在尝试任何计数信息之前回滚了对状态的更改,并克隆此查询(在设置setMaxResults
和groupBy
之前),更改选择(保留所有位置)并获取计数信息。
如果有人提供更好的解决方案,我将不胜感激
获取结果:
- 从选择中删除了 COUNT()
- 要求将结果更改为"正常"
->getArrayResults
获取计数:
$q = clone $query; $q->select('count(distinct t.hotel) as count'); $r = $q->getQuery()->getArrayResult(); echo $r[0]['count']; exit();
如果需要,请保留 groupBy:
$query = $repository->createQueryBuilder('t')
$query->select('COUNT(t.katId)', 't.hotel', 't.title', 't.desc', 'picture', 'MIN(t.price) AS price');
$query->from(ENTITY STRING, 't', 't.hotel'); //here defined your array result key
$query->where('t.visible = (:visible)')->setParameter('visible', 1);
$query->groupBy('t.hotel');
$query->setMaxResults(10);
echo $query->getQuery()->getScalarResult();
exit();
编辑:新编辑作品?
你只对 COUNT(t.katId) 感兴趣,所以你应该删除其他返回的字段 't.hotel', 't.title' 等。 然后,结果将包含单个返回值(单个标量结果),因此不需要$query->setMaxResults(10)
。