2016-10-12 17 views
0

私は連想配列としてデータベースから結果を取得する必要があります。私はこのガーデンに関連する庭園や家族が(1対多)です。だから各庭のために私は家族の配列を取得する必要があります。だから、庭は鍵でなければならず、家族の配列 - それは価値です。だから私が試した:Symfony Doctrine Group

public function getFamiliesInGardens($client) 
{ 
    $qb = $this->createQueryBuilder('g'); 

    $qb 
     ->select(['g.name as garden', 'family.name', 'family.id']) 
     ->join('g.growing', 'growing') 
     ->join('growing.plant', 'plant') 
     ->join('plant.family', 'family') 
     ->where('g.client = :client') 
     ->orderBy('g.name') 
     ->addOrderBy('growing.endDate', 'DESC') 
     ->setParameter('client', $client); 

    $grow = $qb->getQuery()->getArrayResult(); 

    return $grow; 
} 

私が得た:

[0] => array(3) { 
    ["garden"]=> string(1) "1" 
    ["name"]=>string(9) "Brassicas" 
    ["id"]=> int(13) 
} 
[1] => 
    array(3) { 
    ["garden"]=> string(1) "1" 
    ["name"]=> string(13) "Miscellaneous" 
    ["id"]=> int(18) 
    } 

しかし、私は期待して:私は庭でグループを追加する場合は

[0] => array(1) { 
    ["1"] => array(2) { 
     [0] => array(2) { 
      ["name"] =>string(9) "Brassicas" 
      ["id"] => int(13) 
     }, 
     [1] => array(2) { 
      ["name"]=>string(9) "Miscellaneous" 
      ["id"]=> int(18) 
     }, 
    } 
} 

が、結果は最初と同じになりますが、庭繰り返されることなく一度だけ選択されます。家族も同じです。だから、私は配列を得るために何を変えることができますか?garden => families?

答えて

3

3年前に私が同じことを望んだこのユースケースを見つけました。しかし、GROUP BYはそのようには機能しません。

手動でレコードを繰り返し処理し、必要に応じてグループ化する必要があります。たとえば、次のようなものがあります。

$gardens = .... 
$groups = []; 
for ($gardens as $g){ 
    if (!array_key_exists($g['id'], $groups)){ 
     $groups[$g['id']] = []; 
    } 

    $groups[$g['id']][] = $g; 
} 
関連する問題