Php 获取未定义的索引:使用集合时出现饼干错误
我试图收集来自数据库的分类产品,为此我在laravel中使用collect()Php 获取未定义的索引:使用集合时出现饼干错误,php,laravel,Php,Laravel,我试图收集来自数据库的分类产品,为此我在laravel中使用collect() $products=ConsumerProduct::where('status','Active') ->whereHas('masterStocks',函数($query)使用($warehouse){ $query->where('master\u stocks.warehouse\u id',$warehouse->warehouse\u id); })->与('masterStocks') ->带('类别'
$products=ConsumerProduct::where('status','Active')
->whereHas('masterStocks',函数($query)使用($warehouse){
$query->where('master\u stocks.warehouse\u id',$warehouse->warehouse\u id);
})->与('masterStocks')
->带('类别')
->加入('product_categories'、'consumer_products.ProductCategories_id'、'='、'product_categories.category_id')
->orderBy('categoryName')
->get();
$categoryProducts=collect();
foreach($key=>$product的产品){
$categoryProducts[$product->category->categoryName][]=$product;
}
这是从db获得的结果,很好
illumb\Database\elount\Collection{604▼
#项目:阵列:5[▼
0=>App\ConsumerProduct{#622▼
#主密钥:“id”
+时间戳:真
#日期:数组:2[▶]
#连接:“mysql”
#表:“消费品”
#键类型:“int”
+递增:真
#带:[]
#withCount:[]
#每页:15
+存在:正确
+最近被创建:false
#属性:数组:32[▶]
#原件:阵列:32[▶]
#更改:[]
#演员:[]
#日期格式:空
#附件:[]
#调度事件:[]
#可观测值:[]
#关系:数组:2[▶]
#触摸:[]
#隐藏:[]
#可见:[]
#可填充:[]
#防护:阵列:1[▶]
#强制删除: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;
}
然后它给了我这个结果,在这个结果中,我只得到了每个类别的一个产品
illumb\Support\Collection{#606▼
#项目:阵列:3[▼
“饼干”=>App\ConsumerProduct{#622▶}
“意大利面”=>App\ConsumerProduct{#624▶}
“茶”=>应用程序\消费者产品{#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);
显示
$products
阵列中的内容please@RiggsFolly我已经更新了我的答案现在检查现在我得到这个错误间接修改light\Support\Collection的重载元素没有效果
它可能只有light\Support\Collection
的解决方案,但我不明白…有什么问题吗使用->keyBy('categoryName');