mysql - Laravel 多级分组
问题描述
如何GROUP BY
在 Laravel 中进行多个级别。我试过这段代码。
我也使用toArray()
then 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",
}
],
}
]
}
解决方案
试试这个。上周我也有这个问题,但我设法通过了。
$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
推荐阅读
- valgrind - 可以在 Valgrind 抑制文件中使用注释吗?
- python-3.x - 如何在 QcomboBox 中显示项目取决于第二个 QcomboBox 选定项目
- javascript - 在 Java Script 中动态生成嵌套 DIV 结构的有效方法
- html - 如何链接到 SVG 图像中的特定形状
- laravel - 在 Laravel 中获取用户记录的良好做法?
- c++ - 在 C++ 中将 HEX 字符串转换为 long
- javascript - 带有动态键的 JS SetInterval 未清除
- node.js - 是否可以在图像保存/上传之前使用 Multer 获取图像尺寸(宽度和高度)
- python - 加入两个表,文件名有额外的字符串,正则表达式从文件名中删除字符串并进行连接
- java - Android Studio 替换了我的 main.dart 文件中的代码