通过3个表检索数据,Laravel 9

bfnvny8b  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(118)

我有3个表(品牌-类别-产品)。每个产品属于一个品牌,并属于多个类别。有一个品牌页面,将显示该品牌的产品和该品牌的产品类别,所以我想使用laravel 9获得该品牌的类别,并将数据发送到API。

    • 结构**
products
  id
  title
  brand_id
  price
  etc...
categories
  id
  title
  description
  parent_id
product_categories
  product_id
  category_id
brands
  id
  title
  logo
  description
    • 型号***产品. php *
public function brand()
    {
        return $this->hasOne(Brand::class, 'id', 'brand_id');
    }

    public function category()
    {
        return $this->belongsToMany(Category::class, 'product_categories');
    }
  • 分类. php *
public function parent()
    {
        return $this->hasOne(Category::class, 'id', 'parent_id');
    }

    public function children()
    {
        return $this->hasMany(Category::class, 'parent_id', 'id');
    }
  • 产品类别. php *
public function category(){
        return $this->belongsTo(Category::class);
    }
    
    public function Products(){
        return $this->hasMany(Product::class, 'id', 'product_id');
    }
  • 品牌. php *
public function products(){
        return $this->hasMany(Product::class);
    }

我想知道这个品牌的分类。

8fsztsew

8fsztsew1#

根据您希望如何使用结果以及希望在何处构造结果,您可以简单地执行此操作

$brand = Brand::with(['products.category'])->first($id);

这将加载一个给定的品牌及其所有的产品,然后为所有这些产品加载其给定的类别。它将使用3个quieres来获取所有的数据,然后给你一个完整的对象,如下所示:

$category = $brand->products[0]->category[0];

产品将是一个集合(可能为空),类别也是如此
如果你想把这个精简到一个唯一类别的列表,你可以做以下事情。

$list = $brand->pluck('products.category.name', 'products.category.id');

相关问题