Laravel遍历Product构建分类商品数组仅返回单条数据如何解决
按商品分类存储全量商品信息的修改方案
问题根因
- 目标数组变量名错误:循环内错误操作了单个商品对象
$product,而非你提前定义的结果数组$productArr - 赋值逻辑错误:每次直接给分类键赋值单条商品数据,会覆盖之前同分类下的已有内容,最终仅能保留最后一条同分类商品
修复后的代码
通用循环写法
$products = Product::all(); $productArr = []; foreach($products as $product) { // 首次遇到该分类时先初始化空数组 if (!isset($productArr[$product->category])) { $productArr[$product->category] = []; } // 向分类数组追加新商品,不会覆盖原有内容 $productArr[$product->category][] = [ 'name' => $product->name, 'price' => $product->price ]; } dd($productArr);
最终输出的结构符合需求:
'tshirts' => [ [ 'name' => 'tshirt 1', 'price' => 99 ], [ 'name' => 'tshirt 2', 'price' => 129 ] // 该分类下其余商品 ]
Laravel框架快捷写法(基于集合操作)
如果你用的是Laravel框架,可以直接用集合的内置方法实现,无需手动写循环:
$productArr = Product::all() ->groupBy('category') ->map(fn ($products) => $products->map(fn ($product) => [ 'name' => $product->name, 'price' => $product->price ])->toArray()) ->toArray(); dd($productArr);
内容的提问来源于stack exchange,提问作者Aurilie
相关产品推荐
相关产品推荐

