2016-10-12 5 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 => family?

ответ

3

Я наткнулся на этот прецедент 3 года назад, где я надеялся на то же самое. Однако GROUP BY не работает.

Вам придется вручную перебирать записи и группировать их по мере необходимости. Например, примерно следующее:

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

    $groups[$g['id']][] = $g; 
}