hasOneThrough Laravel雄辩的关系

时间:2020-07-03 06:22:35

标签: laravel eloquent eloquent-relationship

我有3个标签类别,子类别和产品

  • 类别表
---------------------
| id | category_name |
---------------------
  • sub_category表
--------------------------------------------
| id | category_id(FK) | sub_category_name |
--------------------------------------------
  • 产品表
-----------------------------------------------------------------
| id | sub_category_id(FK) | product_name | product_description |
-----------------------------------------------------------------

**如何使用hasOneThrough雄辩的关系(或使用任何其他关系)获取产品类别名称。 我在产品模型**中尝试过此

public function category(){
return $this->hasOneThrough(
    Category::class, 
    SubCategory::class
);

}

但是它给出了错误:未知列'sub_categories.product_id'

1 个答案:

答案 0 :(得分:1)

您可以安装此外部软件包staudenmeir/belongs-to-through来添加所需的关系。

class Product extends Model
{
    public function subCategory()
    {
        return $this->belongsTo(SubCategory::class);
    }

    public functoin category()
    {
        return $this->belongsToThrough(Category::class, SubCategory::class);
    }
}

class SubCategory extends Model
{
    public functoin category()
    {
        return $this->belongsTo(Category::class);
    }
}

class Category extends Model
{
    public function subCategories()
    {
        return $this->hasMany(SubCategory::class);
    }

    public functoin products()
    {
        return $this->hasManyThrough(Product::class, SubCategory::class);
    }
}

如果您需要直接从产品访问类别,并想使用类似$product->category()->attach($category->id)之类的laravel函数,那么您就需要这种依赖来实现。

如果您可以这样做:

    $product->subCategory->category;
    // or
    $product->subCategory->category()->attach($category->id);

那么您就不需要依赖项,并且可以在产品模型上排除类别关系。