我需要作为关联数组从我的数据库中获得结果。我有与这个花园相关的花园和家庭(一对多)。所以每个花园我都需要一排排的家庭。因此,花园必须是关键,家庭的排列-它是一个价值。所以我试着:
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)
},
}
}如果我将添加一组一个花园,结果将是相同的第一,但花园将被选择一次,不重复。家人也一样。那么,我可以更改什么来获得数组:花园=>家族?
发布于 2016-10-12 10:09:53
三年前,我偶然发现了这个用例,当时我也希望如此。然而,GROUP BY并不是这样工作的。
您必须手动遍历记录,并根据需要对它们进行分组。例如,如下所示:
$gardens = ....
$groups = [];
for ( $gardens as $g ){
if (!array_key_exists($g['id'], $groups)){
$groups[$g['id']] = [];
}
$groups[$g['id']][] = $g;
}https://stackoverflow.com/questions/39995366
复制相似问题