从产品模型(Laravel)到达子类别

时间:2019-05-17 13:11:54

标签: laravel eloquent relationship

我正试图从雄辩的关系中获得第一个laravel模型。如何直接从产品访问子类别?

我拥有的3种型号:

产品(ID,category_id等)

    public function categories()
    {
        return $this->belongsTo('App\Category', 'category_id');
    }

类别(ID,名称)

    public function products()
    {
        return $this->hasMany('App\Product', 'category_id');
    }

    public function sub_categories()
    {
        return $this->hasMany('App\SubCategory', 'category_id');
    }

子类别(ID,category_id,名称)

    public function categories()
    {
        return $this->belongsTo('App\Category', 'category_id');
    }

我以为我可以通过

Product::find(1)->categories->sub_categories;

我在这里缺少明显的东西吗?

4 个答案:

答案 0 :(得分:0)

阅读此docs

产品

class Product extends Model
{
    public function SubCategory()
    {
        return $this->hasManyThrough('App\Category', 'App\SubCategory');
    }
}

答案 1 :(得分:0)

此外,在subCategories模型上添加Product方法,并且产品属于类别而不是类别 并且也总是尝试使用驼峰大小写作为方法(subCategories)

以此替换您的代码

产品:

public function category()
{
    return $this->belongsTo('App\Category', 'category_id');
}

public function subCategories()
{
    return $this->category()->subCategories;
}

类别:

public function products()
{
    return $this->hasMany('App\Product', 'category_id');
}

public function subCategories()
{
    return $this->hasMany('App\SubCategory', 'category_id');
}

子类别:

public function categories()
{
    return $this->belongsTo('App\Category', 'category_id');
}

最后使用它来获取子类别

Product::find(1)->subCategories;

答案 2 :(得分:0)

Product::find(1)->categoriesarray。您将必须循环它以获得每个类别的子类别。见下文

$categories = Product::find(1)->categories;
foreach ($categories as $category {
	//Get subcategories for each category
	dump($category->sub_categories);
}

答案 3 :(得分:0)

尝试一下:

Product::with(['categories', 'categories.sub_categories'])->find(1)

您将获得带有其子类别的类别数组。