我有3个标签类别,子类别和产品
---------------------
| id | category_name |
---------------------
--------------------------------------------
| 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'
答案 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);
那么您就不需要依赖项,并且可以在产品模型上排除类别关系。