首页 > 解决方案 > 获取未定义索引:使用集合时出现饼干错误

问题描述

我正在尝试收集来自数据库的类别明智的产品,为此我在 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 ▶}
  ]
}

如何解决这个问题并获得类别明智的产品。

标签: phplaravel

解决方案


你需要定义你的数组:

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

推荐阅读