Laravel collection 删除一个值
Laravel collection pluck dropping a value
我在 Laravel 5.2
项目中有以下 Eloquent
查询:
$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 三行(匹配原始查询输出),如下所示:
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
查询使用相同的过程,它按预期工作,但在这个 collection.
上没有
此外,我还对 objects 数组中的所有值求和,如下所示:
$regsTotal = array_sum($regsByCtryCollection->pluck('val')->toArray());
我得到了正确的值,包括所有三个记录的总和:
$regsTotal = 7;
问题出在 pluck('ctry', 'val')
。这将 return val
作为键 & ctry
作为值。在您的查询输出中,at
& br
具有相同的值 1
。所以其中一个被另一个替换了。
尝试pluck('val', 'ctry')->map(function($value, $country)
我在 Laravel 5.2
项目中有以下 Eloquent
查询:
$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 三行(匹配原始查询输出),如下所示:
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
查询使用相同的过程,它按预期工作,但在这个 collection.
此外,我还对 objects 数组中的所有值求和,如下所示:
$regsTotal = array_sum($regsByCtryCollection->pluck('val')->toArray());
我得到了正确的值,包括所有三个记录的总和:
$regsTotal = 7;
问题出在 pluck('ctry', 'val')
。这将 return val
作为键 & ctry
作为值。在您的查询输出中,at
& br
具有相同的值 1
。所以其中一个被另一个替换了。
尝试pluck('val', 'ctry')->map(function($value, $country)