You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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码颜色总计
黑色15221855
白色1017-27
总计25391882

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:35:25