此帖已经收到了很好的答案
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时,我必须以不同方式格式化地图,但无法看到如何。任何人都可以解释我如何请求多个字段以及在视图上输出它们而不是原始问题中的一个字段?谢谢!
答案 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()
。