laravel 多级多对多

laravel multi-level many to many

我有 3 个模型,Industry、Category、Machine,它们的链接如下

问题:我想展示一个行业中的所有机器,我该怎么做?

到目前为止我做了什么:我检索了与特定行业相关的所有类别 ID,例如:$industry->categories()->pluck("id")。我不知道接下来要做什么才能获得所有机器

$categories = $industry->categories()->pluck("id"); $machines = App\Machine::query()->whereIn('category_id', $categories)->get();

Industry模型关系:

class Industry {
    public function categories(){
        return $this->hasMany(Category::class);
    }
}

Category模型关系:

class Category {
    public function indusry(){
        return $this->hasOne(Industry::class);
    }

    public function machines(){
        return $this->belongsToMany(Machine::class);
    }
}

Machine模型关系:

class Machine {
    public function categories(){
        return $this->belongsToMany(Category::class);
    }
}

你可以使用这样的whereHas方法:

$machines = Machine::whereHas('categories', function($query) {
    $query->whereHas('indusry', function($sub_query) {
        $sub_query->where('name', {your_industry});
    });
});