2016-03-02 17 views
1

我有以下查詢:檢查柱分組(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 ] 
] 

現在「柏林」給出不止一個(拉鍊)'code',在這個例子中'14199'顯然只是最後一個。另一方面,'柏林根'只有一個代碼。

是否有任何方法來改變查詢,使我有'各種'而不是'14199',但保留其他人? 它不一定在查詢本身,我想也許是一個'foreach'的查詢(w/out groupBy),並檢查重複的城市?

任何暗示讚賞!

回答

1

你應該能夠到,要實現你的需要:

$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 . '%'); 

你要計算你的結果(一組通過),並根據計,你可以切換爲一個名稱或其他。