Laravel BelongsToMany有两个支点表

时间:2018-04-16 17:58:39

标签: laravel laravel-5

我有以下表结构:

产品

  • ID

product_formats

  • ID
  • PRODUCT_ID

product_prices

  • ID
  • product_format_id
  • market_id

市场

  • ID

产品可以有多种格式,每种格式都有自己的价格,属于不同的市场。如何从产品型号中检索市场列表?

我曾经有一个数据透视表,但现在我有两个数据透视表。

class Product extends Model
{
    public function markets()
    {
        return $this->belongsToMany(Market::class);
    }
}

更新

为了得到我想要的结果,我做了以下事情:

public function markets()
{
    return Market::whereIn('id', $this->prices()->distinct()->pluck('market_id')->toArray());
}

但是,我想知道是否有办法通过关系实现这一目标。

1 个答案:

答案 0 :(得分:0)

您需要在模型中建立关系。

<强>产品型号:

public function productFormats()
{
  return $this->belongTo(ProductFormatsModel::class);
}

<强> ProductFormatsModel:

public function productPrices()
{
  return $this->belongTo(ProductPricesModel::class);
}

<强> ProductPricesModel:

public function markets()
{
  return $this->hasOne(MarketsModel::class);
}
控制器中的

foreach($product->productFormats as $productFormat) 
{
  foreach($productFormat->productPrices as $productPrice)
  {
     var_dump($productPrice->markets);
  }
}

对于独特的市场

ProductModel中的

public function productPrices()
    {
        return $this->hasManyThrough(
                      'App\ProductPricesModel', 
                      'App\ProductFormatsModel',
                      'product_id', 
                      'product_format_id'
                      'id',
                      'id'
                     );
    }
控制器中的

foreach($product->productPrices as $productPrice)
{
  var_dump($productPrice->markets)
}