2016-10-12 13 views
0

결과를 내 데이터베이스에서 연관 배열로 가져와야합니다. 나는이 정원과 관련된 정원과 가족이 (일대 다). 그래서 각 정원을 위해 나는 가족의 배열을 얻을 필요가있다. 따라서 정원은 핵심이어야하며 가족의 배열이어야합니다. 그것은 가치입니다. 그래서 내가 시도 :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; 
}