Laravel有很多通过

Laravel has many through

我的table

products
  - id
  - name

product_variants
  - id
  - product_id
  - color_id

product_colors
  - id
  - hex

我不想有这样的关系

Product::colors(); // get all the colors through variants

在我的 Product.php 模型中,我有

public function colors() {
    return $this->hasManyThrough('App\Models\ProductColor', 'App\Models\Product', 'id', 'id', 'product_id', 'product_color_id');
}

这似乎不起作用。

作为旁注。在当前的 laravel 文档中,它给出了以下示例:

return $this->hasManyThrough(
            'App\Post',
            'App\User',
            'country_id', // Foreign key on users table...
            'user_id', // Foreign key on posts table...
            'id', // Local key on countries table...
            'id' // Local key on users table...
        );

我认为评论不正确的地方。我的经验是本地键在外键之前。

看你的数据库好像颜色和产品的关系是多对多的,代码应该是 产品型号:

public function colors(){
   return $this->belongsToMany('App\Models\ProductColor', 'product_variants', 'product_id', 'id')->withPivot('id');
}

产品颜色型号:

public function products(){
   return $this->belongsToMany('App\Models\Product', 'product_variants', 'id', 'product_id')->withPivot('id');
}

或者,如果您想要更大的灵活性,请创建一个 ProductVariant 模型,并在 Product 和 ProductColor 上使用 hasMany 关系,并在 ProductVariant 内部使用两个 belongsTo,to Product 和 ProductColor