检查列是否已分组(QueryBuilder)

Check if column was grouped (QueryBuilder)

我有以下查询:

$qb
   ->select('z')
   ->where($qb->expr()->orX(
       $qb->expr()->like('z.city', ':czRequest')
   ))
   ->groupBy('z.city')
   ->setParameter('czRequest', $cz . '%');

使用 $cz = 'Ber' 我得到一个这样的数组:

array:3 [
 0 => array:4
  [ "id" => 12899 "country" => "DE" "city" => "Berlin" "code" => 14199 ]    
 1 => array:4
  [ "id" => 6483 "country" => "DE" "city" => "Berlingen" "code" => 54570 ]
 2 => array:4
 [ "id" => 8438 "country" => "DE" "city" => "Berlingerode" "code" => 37339 ]
]

现在'Berlin'给出了不止一个(zip)'code',在这个例子中'14199'显然只是最后一个。 'Berlingen'另一方面只有一个代码。

有没有什么方法可以改变查询,使我有 'various' 而不是 '14199' 但保留其他的? 它不必在查询本身中,我认为查询可能是 'foreach'(w/out groupBy)并检查重复的城市?

感谢任何提示!

你应该能够满足你的需求:

$qb
  ->select('z, CASE WHEN (COUNT(z)) > 1 THEN \'various\' ELSE z.code END AS code2')
  ->where($qb->expr()->orX(
    $qb->expr()->like('z.city', ':czRequest')
  ))
  ->groupBy('z.city')
  ->setParameter('czRequest', $cz . '%');

您必须计算您的结果(对于分组依据),并且根据计数,您可以切换为名称或其他名称。