Laravel系列采用了降价方式

时间:2017-12-07 07:25:10

标签: php laravel-5.2 laravel-eloquent

我在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;

1 个答案:

答案 0 :(得分:1)

问题在于pluck('ctry', 'val')。这将返回val作为关键& ctry作为价值。在您的查询输出at& br具有相同的值1。所以其中一个被另一个取代。

尝试pluck('val', 'ctry')->map(function($value, $country)

Reference