Php 在Laravel中合并集合的值

Php 在Laravel中合并集合的值,php,arrays,laravel,eloquent,Php,Arrays,Laravel,Eloquent,我一直在思考这个问题。到目前为止,我一直在尝试阅读、搜索和尝试这些收藏的文档,但对我要做的事情却毫无把握 我试图实现的是按“产品id”合并所有产品,将“数量”相加,并将同一产品的“责任”数组合并到一个新集合中: 我的数据库中有以下信息: [ { "qty":"8", "product_id":6, "product":{ "id":6, "name":"Mantequilla", "barcode":

我一直在思考这个问题。到目前为止,我一直在尝试阅读、搜索和尝试这些收藏的文档,但对我要做的事情却毫无把握

我试图实现的是按“产品id”合并所有产品,将“数量”相加,并将同一产品的“责任”数组合并到一个新集合中:

我的数据库中有以下信息:

[
   {
      "qty":"8",
      "product_id":6,
      "product":{
         "id":6,
         "name":"Mantequilla",
         "barcode":"123456789",
         "full_name":"Mantequilla - 123456789"
      },
      "itbis":"0",
      "precio":"0",
      "responsible":"Juan"
   },
   {
      "qty":"4",
      "product_id":6,
      "product":{
         "id":6,
         "name":"Mantequilla",
         "barcode":"123456789",
         "full_name":"Mantequilla - 123456789"
      },
      "itbis":"0",
      "precio":"0",
      "responsible":"Carlos"
   },
   {
      "qty":"3",
      "product_id":8,
      "product":{
         "id":8,
         "name":"Papas",
         "barcode":"4567894456",
         "full_name":"Papas - 4567894456"
      },
      "itbis":"0",
      "precio":"0",
      "responsible":"Pedro"
   }
]
然后将转换为:


谢谢你救了我一天。我并没有弄清楚地图是如何工作的,所以我学习了它的工作原理并解决了我的问题。谢谢!你救了我一天。我并没有弄清楚地图是如何工作的,所以我学习了它的工作原理并解决了我的问题。
[
   {
      "qty":"12",
      "product_id":6,
      "product":{
         "id":6,
         "name":"Mantequilla",
         "barcode":"123456789",
         "full_name":"Mantequilla - 123456789"
      },
      "itbis":"0",
      "precio":"0",
      "responsible": ["Juan", "Carlos"]
   }
   {
      "qty":"3",
      "product_id":8,
      "product":{
         "id":8,
         "name":"Papas",
         "barcode":"4567894456",
         "full_name":"Papas - 4567894456"
      },
      "itbis":"0",
      "precio":"0",
      "responsible":"Pedro"
   }
]
        $arr = [...]; // Your input array

        $res = collect($arr)
            ->groupBy('product_id')
            ->map(function ($sub_collection) {
                $first = $sub_collection->first();

                $first['qty']         = array_sum(array_column($sub_collection->toArray(), 'qty'));
                $first['responsible'] = array_merge(array_column($sub_collection->toArray(), 'responsible'));

                return $first;
            })
            ->toArray();