-2

我正在尝试将包添加到类别数组中,只有在第一个类别中它才能像我想要的那样工作,但在第二个和第三个类别中它不再具有数组格式。(见下面的例子)

我这样做是因为商店有类别和服务器,但一个包可以在多个服务器中,并且该类别连接到商店。而且我只想在服务器中至少有一个包时显示该类别

[
  {
    "id": 7,
    "name": "Category1",
    "packages": [
      {
        "id": 3,
        "name": "Package1",
        "minecraft_item": "3",
        "price": "4.43",
        "category_id": 7,
        "position": 0,
        "created_at": null,
        "updated_at": "2020-12-14T08:49:59.000000Z"
      }
    ]
  },
  {
    "id": 8,
    "name": "Category2",
    "packages": {
      "1": {
        "id": 4,
        "name": "Package2",
        "minecraft_item": "3",
        "price": "4.43",
        "category_id": 8,
        "position": 0,
        "created_at": null,
        "updated_at": "2020-12-14T08:49:59.000000Z"
      }
    }
  },
  {
    "id": 9,
    "name": "Category3",
    "packages": {
      "2": {
        "id": 5,
        "name": "Package3",
        "minecraft_item": "WOOD",
        "price": "12",
        "category_id": 9,
        "position": 0,
        "created_at": null,
        "updated_at": "2020-12-14T08:49:59.000000Z"
      }
    }
  }
]

代码:

        $categories = Category::where('store_id', $server->store->id)->get();
        $array = [];
        foreach ($categories as $key => $category) {
            $packages = Server::find($server->id)->packages->where('category_id', $category->id);
            if ($packages->first()) {
                $array[$key]['id'] = $category->id;
                $array[$key]['name'] = $category->name;
                $array[$key]['packages'] = $packages;
            }
        }

有谁知道我做错了什么?

4

1 回答 1

2

https://laravel.com/docs/8.x/eloquent-relationships - 描述 Laravel 中的关系。在您的情况下,在您的Category模型中添加:

public function packages()
{
   return $this->hasMany(Package::class);
}

接着:

$categories = Category::where('store_id', $server->store->id)->whereHas('packages')
->select(['id', 'name']
->with(['packages']
->get();
于 2020-12-14T09:19:26.063 回答