多个表之间的一对多关系

时间:2018-08-05 13:43:26

标签: laravel eloquent

我正在尝试使用中间模型 BrandProduct 产品品牌模型之间建立关系,中间模型还包含一些其他信息例如 product_model

我的目的是使用其他制造商信息访问属于特定品牌的所有产品,并且我还希望使用其他信息访问特定产品的品牌。

我有一个名为{strong>产品的Model,具有这些属性

  • id
  • 名称
  • sku
  • 数量
  • 等等....

另一个名为{strong> Brand 的Model具有以下属性

  • id
  • 名称
  • 徽标

还有一个名为 BrandProduct 且具有属性的中间体Model

  • id
  • brand_id
  • product_id
  • 模型
  • 等等....

我要分别注册品牌和产品,并通过 BrandProduct 模型(具有附加属性,例如 product_model )在它们之间建立关系。

Brand.php模型包含:

public function products(){
    return $this->hasMany('App\Models\BrandProduct');
}

Product.php模型包含:

public function manufacturer(){
    return $this->hasOne('App\Models\BrandProduct');
}

BrandProduct.php模型包含:

public function data(){
    return $this->belongsTo('App\Models\Product', 'product_id', 'id');
}

public function brand(){
    return $this->belongsTo('App\Models\Brand', 'brand_id', 'id');
}

现在我可以通过

成功检索Product > Manufacturer
$p = Product::find(id)->manufacturer

但是我无法通过尝试获得反关系BrandProduct > Data

$p = BrandProduct::find(id)->data

类似地,我可以通过

检索所有Brand > Products
$p = Brand::find(id)->products

但是不能得到逆关系

$b = BrandProduct::find(id)->brand

最后,我想实现以下目标:

//For Brand > Products
$p = Brand::find(id)->products;

$product_model = $p[0]->model;
$product_name = $p[0]->data->name;

//For Product > Manufacturer
$p = Product::find(id)->manufacturer;
$product_model = $p->model;
$brand_name = $p->brand->name;

请告诉我我的方法有什么问题,除了这种关系,其他所有关系都可以正常工作。

0 个答案:

没有答案