【问题标题】:Laravel group by multiple levelLaravel 多级分组
【发布时间】:2020-04-27 06:41:48
【问题描述】:

如何在 Laravel 中 GROUP BY 多个级别。我试过这段代码。

我也使用了toArray() 然后array_values(),但结果与使用values() 相同

编辑:抱歉,我写的是 value() 而不是 values()

使用 values() 时,product_name 不显示。

// Controller
$products = DB::table('product_registrations')
    // ->select(['product_name', 'color'])
       ->join('colors', 'colors.id', '=', 'product_registrations.color_id')
       ->join('sizes', 'sizes.id', '=', 'product_registrations.size_id')
       ->join('products', 'products.id', '=', 'product_registrations.product_id')
       ->get()
       ->groupBy(['product_name', 'color']);
       // ->values(); // I've used values(), it worked but first level groupBy name missing

return response()->json(['products' => $products]);

---

I want something like: 

products: [
    product1: [
        color1: {},
        color2: {}
    ]
]

没有值()

{
    "products": {
        "light blue dress": {
            "Ягаан": [
                {
                    "id": 1,
                    "product_id": 1,
                    "color_id": 1,
                    "size_id": 6,
                    "color": "Ягаан",
                    "product_name": "light blue dress",
                }
            ],
        },
    }
}

使用值()

{
    "products": [
        {
            "Ягаан": [
                {
                    "id": 1,
                    "product_id": 1,
                    "color_id": 1,
                    "size_id": 6,
                    "color": "Ягаан",
                    "product_name": "light blue dress",
                }
            ],
        }
    ]
}

【问题讨论】:

  • “Яган”在蒙古语中是粉红色的意思xD
  • 请不要为此使用屏幕截图 - 复制粘贴问题中的代码。同样,如果没有value(),我也不明白您的解决方案有什么问题
  • @ChristopheHubert,好的,我刚刚更新了帖子。我已经阅读了你的博客文章,但它只返回一个对象而不是数组。
  • 对不起,你能否解释一下为什么最深的层次是数组而其他不是
  • 感谢更新 - 您能否使用相同的详细信息分享您期望的代码?我实际上仍然对问题所在感到困惑。

标签: mysql database laravel eloquent


【解决方案1】:

试试这个。上周我也遇到了问题,但我设法解决了。

$products::latest()->get();

$products = products->groupBy(function($product) {
  return $product->name;
});

$products = products->map(function($product) {
  return $product->groupBy(function($prod) {
    return $prod->color;
  });
});

return $products;

你也可以使用array_only优化这个方法这个方法只适用于laravel

【讨论】:

  • 对不起,它仍然给我相同的结果 - 它返回对象而不是数组
  • 我做的事情是让对象在我的 javascript 中进行数组,因为我不能直接在其中映射
  • 是的,我也是 xD,我决定在 JS 中进行一些分组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多