Laravel按颜色分组统计尺码数量及总计实现问询
按颜色分组统计尺码订购数量方案
1. 单颜色指定尺码统计(如黑色34码总和)
直接基于你现有拉取的$data['order']集合,筛选对应颜色和尺码后求和:
$blackSize34Total = collect($data['order']) ->where('collection_color', '黑色') ->flatMap(fn($order) => $order['piece']) ->where('size', '34') ->sum('piece'); // 输出结果 echo "黑色34码总计:{$blackSize34Total}";
2. 所有尺码的整体总计
统计所有颜色、所有尺码的订购总量:
$totalAllSizes = collect($data['order']) ->flatMap(fn($order) => $order['piece']) ->sum('piece'); echo "所有尺码总计:{$totalAllSizes}";
3. 按颜色分组统计各尺码数量
通过集合分组,实现每个颜色下的尺码数量统计,同时计算颜色小计和整体总计:
// 按颜色分组统计 $colorSizeStats = collect($data['order']) ->groupBy('collection_color') ->map(function($colorOrders, $color) { // 提取当前颜色下所有尺码数据 $sizePieces = $colorOrders->flatMap(fn($order) => $order['piece']); // 按尺码分组求和 $sizeStats = $sizePieces->groupBy('size') ->map(fn($pieces) => $pieces->sum('piece')); // 颜色小计 $colorTotal = $sizeStats->sum(); return [ 'size_stats' => $sizeStats, 'color_total' => $colorTotal ]; }); // 整体总计 $grandTotal = $colorSizeStats->sum('color_total');
4. 数据展示示例
结构化输出示例
// 打印统计结果 print_r($colorSizeStats->toArray());
输出结构:
[ "黑色" => [ "size_stats" => [ "34" => 15, "36" => 22, "38" => 18 ], "color_total" => 55 ], "白色" => [ "size_stats" => [ "34" => 10, "36" => 17 ], "color_total" => 27 ] ] 整体总计:82
文本表格展示
| 颜色 | 34码 | 36码 | 38码 | 颜色总计 |
|---|---|---|---|---|
| 黑色 | 15 | 22 | 18 | 55 |
| 白色 | 10 | 17 | - | 27 |
| 总计 | 25 | 39 | 18 | 82 |
5. 数据库层面优化查询(大数据量推荐)
如果数据量较大,直接通过Eloquent关联查询统计,避免拉取全量数据后处理,性能更优:
$stats = CollectionOrder::where('cut_id', $request->cut_id) ->with(['collectionColor', 'orderPiece.CollectionColorSizeBarcode']) ->get() ->groupBy('collectionColor.color_name') ->map(function($orders, $color) { $sizeData = $orders->flatMap(function($order) { return $order->orderPiece->map(function($piece) { return [ 'size' => $piece->CollectionColorSizeBarcode->size, 'piece' => $piece->piece ]; }); }); $sizeStats = $sizeData->groupBy('size')->map(fn($items) => $items->sum('piece')); return [ 'size_stats' => $sizeStats, 'color_total' => $sizeStats->sum() ]; }); $grandTotal = $stats->sum('color_total');
内容的提问来源于stack exchange,提问作者onur
相关产品推荐
相关产品推荐

