php - 获取未定义索引:使用集合时出现饼干错误
问题描述
我正在尝试收集来自数据库的类别明智的产品,为此我在 laravel 中使用 collect() 。
$products = ConsumerProduct::where('status', 'Active')
->whereHas('masterStocks' , function ($query) use($warehouse) {
$query->where('master_stocks.warehouse_id', $warehouse->warehouse_id);
})->with('masterStocks')
->with('category')
->join('product_categories', 'consumer_products.productCategory_id', '=', 'product_categories.category_id')
->orderBy('categoryName')
->get();
$categoryProducts = collect();
foreach ($products as $key => $product) {
$categoryProducts[$product->category->categoryName][] = $product;
}
这是从 db 得到的结果,很好。
Illuminate\Database\Eloquent\Collection {#604 ▼
#items: array:5 [▼
0 => App\ConsumerProduct {#622 ▼
#primaryKey: "id"
+timestamps: true
#dates: array:2 [▶]
#connection: "mysql"
#table: "consumer_products"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:32 [▶]
#original: array:32 [▶]
#changes: []
#casts: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: array:2 [▶]
#touches: []
#hidden: []
#visible: []
#fillable: []
#guarded: array:1 [▶]
#forceDeleting: false
}
1 => App\ConsumerProduct {#623 ▶}
2 => App\ConsumerProduct {#624 ▶}
3 => App\ConsumerProduct {#625 ▶}
4 => App\ConsumerProduct {#626 ▶}
]
}
在 for 循环中我收到错误,没有索引饼干。如果我这样做:
foreach ($products as $key => $product) {
$categoryProducts[$product->category->categoryName] = $product;
}
然后它给了我这个结果,我只得到每个类别的一个产品
Illuminate\Support\Collection {#606 ▼
#items: array:3 [▼
"Biscuit" => App\ConsumerProduct {#622 ▶}
"Pasta" => App\ConsumerProduct {#624 ▶}
"Tea" => App\ConsumerProduct {#626 ▶}
]
}
如何解决这个问题并获得类别明智的产品。
解决方案
你需要定义你的数组:
$products = ConsumerProduct::where('status', 'Active')
->whereHas('masterStocks' , function ($query) use($warehouse) {
$query->where('master_stocks.warehouse_id', $warehouse->warehouse_id);
})->with('masterStocks')
->with('category')
->join('product_categories', 'consumer_products.productCategory_id', '=', 'product_categories.category_id')
->orderBy('categoryName')
->get();
$categoryProducts = [];
foreach ($products as $key => $product) {
if (!isset($categoryProducts[$product->category->categoryName])) {
$categoryProducts[$product->category->categoryName] = [];
}
$categoryProducts[$product->category->categoryName][] = $product;
}
$categoryProducts = collect($categoryProducts);
推荐阅读
- flutter - 将物理签名板链接到 Flutter 桌面
- r - 您如何在一个因子上使用 forcat 的 fct_lump_min() 函数,同时保留另一个识别因子?
- go - 如何在 Go 中为任何执行二进制文件的操作系统禁用堆栈跟踪信息
- wpf - 如何从 c++ cli 将 DesignInstance 设置为 ViewModel
- javascript - Rerun PHP Script inside HTML file without reloading page
- google-cloud-platform - Google 承诺使用折扣和区域详情
- postgresql - 如何更新给定 json 记录的表(可能缺少值)
- javascript - 基于用户角色mongodb的认证
- angular - 如何处理多个表单并以角度打字稿提交,包括显示和隐藏组件?
- python - 我无法点击按钮,硒