我在Eloquent
项目中有以下Laravel 5.2
查询:
$regsByCtryCollection = Organisation::join('countries_currencies', 'countries_currencies.id', '=', 'organisations.country_id')
->select(DB::raw('DISTINCT LCASE(countries_currencies.country_code) AS ctry, COUNT(organisations.id) AS val'))
->groupBy('ctry')
->get();
原始查询产生此输出:
ctry val
at 1
au 5
br 1
Eloquent
调用生成三行的集合(匹配原始查询输出),如下所示:
Collection {#791 ▼
#items: array:3 [▼
0 => Organisation {#777 ▼
#table: "organisations"
#hidden: []
........
#attributes: array:2 [▶]
#original: array:2 [▼
"ctry" => "at"
"val" => 1
]
#relations: array:5 [▶]
........
}
1 => Organisation {#778 ▶}
2 => Organisation {#779 ▶}
]
}
然后,我将Highmaps
这样的值和格式加载
$regsByCtry = $regsByCtryCollection->pluck('ctry', 'val')->map(function($country, $value) {
return [
"hc-key" => $country,
"value" => $value
];
})->values()->toJson();
其中一个值被删除了,我明白了:
[
{"hc-key":"br","value":1},
{"hc-key":"au","value":5}
]
为什么第一个条目被删除?
{"hc-key":"at","value":1}
我正在使用同一个进程和其他两个Eloquent
查询,它按预期工作,但不在此集合上。
此外,我还总结了对象数组中的所有值,如下所示:
$regsTotal = array_sum($regsByCtryCollection->pluck('val')->toArray());
我得到正确的值,包括总结的所有三个记录:
$regsTotal = 7;
答案 0 :(得分:1)
问题在于pluck('ctry', 'val')
。这将返回val
作为关键& ctry
作为价值。在您的查询输出at
& br
具有相同的值1
。所以其中一个被另一个取代。
尝试pluck('val', 'ctry')->map(function($value, $country)