通过 getSingleScalarResult() 和 groupBy() 获取计数查询结果 - exception



我想获取查询结果(限制为 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,因为它可以真实地计算结果。


溶液

我将其分为两个查询,因此 - 为了获得结果,我在尝试任何计数信息之前回滚了对状态的更改,并克隆此查询(在设置setMaxResultsgroupBy之前),更改选择(保留所有位置)并获取计数信息。

如果有人提供更好的解决方案,我将不胜感激

  1. 获取结果:

    • 从选择中删除了 COUNT()
    • 要求将结果更改为"正常"->getArrayResults
  2. 获取计数:

    $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)

相关内容

  • 没有找到相关文章

最新更新