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)

Reference