Php 获取未定义的索引:使用集合时出现饼干错误

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') ->带('类别'

我试图收集来自数据库的分类产品,为此我在laravel中使用collect()

$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');