Laravel中具有GroupBy语句的多个字段

时间:2017-10-18 16:10:45

标签: mysql laravel

此帖已经收到了很好的答案

Laravel Query using GroupBy with distinct traits

但是如何修改它以包含多个字段。该示例使用pluck,它只能抓取一个字段。

我尝试过这样的事情,将多个字段添加到视图中......

$hats = $hatData->groupBy('style')
->map(function ($item){
  return ['colors' => $item->color, 'price' => $item->price,'itemNumber'=>$item->itemNumber];
});

在我对“hatData”的初始查询中,我可以看到字段都在那里但是我得到一个错误,说'colors',(等)在这个集合实例上不可用。我可以看到该集合看起来与从pluck中获得的集合看起来不同,所以当我需要更多字段并且无法使用pluck时,我必须以不同方式格式化地图,但无法看到如何。任何人都可以解释我如何请求多个字段以及在视图上输出它们而不是原始问题中的一个字段?谢谢!

1 个答案:

答案 0 :(得分:1)

当您使用Laravel groupBy()的{​​{1}}时,它会为您提供更深层次的嵌套数组/对象,因此您需要在结果上执行多个映射才能揭示真实模型(或阵列)。

我将使用嵌套集合的示例演示此内容:

Illuminate\Support\Collection

摘要是,您需要在主要分组集合上另外循环$collect = collect([ collect([ 'name' => 'abc', 'age' => 1 ]),collect([ 'name' => 'cde', 'age' => 5 ]),collect([ 'name' => 'abcde', 'age' => 2 ]),collect([ 'name' => 'cde', 'age' => 7 ]), ]); $group = $collect->groupBy('name')->values(); $result = $group->map(function($items, $key){ // here we have uncovered the first level of the group // $key is the group names which is the key to each group return $items->map(function ($item){ //This second level opens EACH group (or array) in my case: return $item['age']; }); }); map()