如何通过一列获得两个讣告数组


How to get two arrays of obiects by one column

嗨,我在一个表中有一个类别,其中parent_id与该表中的id相同。我想要两个对象数组。首先是所在的类别

parent_id=0

其次是子类别。但我不知道如何才能抓住这些子类别。我有这个:

$category= Category::where('parent_id', '=', 0)->get();
dd($category[0]['id']);
$subcategory= Category::where('parent_id', '=', (($category[0]['id']??)));

第一个$category应该返回我的类别数组,第二个带有子类别的数组我需要将数组$categories的每个对象的id调整到每个子类别数组。有可能吗?或者还有其他方法吗?

如果您正确定义了模型关系,您可以以更好的方式获得类别及其子类别。

首先定义关系

class Category extends Model {
  public function parent() {
    return $this->belongsTo(Category::class);
  }
  public function subcategories() {
  }  return $this->hasMany(Category::class, 'parent_id');
}

您现在可以通过以下方式获取所有父类别及其子类别

$parents = Category::whereParentId(0)->with('subcategories')->get();

这将为您提供所有父类别的列表,每个父类别都将具有子类别属性,该属性将存储所有子类别。您可以通过以下方式遍历它们:

foreach ($parents as $parent) {
  printf("Parent category %s'n", $parent->name);
  foreach ($parent->subcategories as $subcategory) {
    printf("Subcategory %s'n", $subcategory->name);
  }
}

小建议:将parent_id设为NULL,并将NULL存储为父类别,而不是0,因为0不是正确的类别id。