laravel 多级多对多
laravel multi-level many to many
我有 3 个模型,Industry、Category、Machine,它们的链接如下
- 行业可以有多个分类,一个分类只能在
一个行业(行业 Id 存储在类别 table 中)
- 一个category可以有多个机器,一个机器可以在多个Categories中(使用pivottable)
问题:我想展示一个行业中的所有机器,我该怎么做?
到目前为止我做了什么:我检索了与特定行业相关的所有类别 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});
});
});
我有 3 个模型,Industry、Category、Machine,它们的链接如下
- 行业可以有多个分类,一个分类只能在 一个行业(行业 Id 存储在类别 table 中)
- 一个category可以有多个机器,一个机器可以在多个Categories中(使用pivottable)
问题:我想展示一个行业中的所有机器,我该怎么做?
到目前为止我做了什么:我检索了与特定行业相关的所有类别 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});
});
});