我具有以下表格结构
表格
tbl_items
id
sub_category_id //foreign key
表子类别
tbl_subcategories
id
category_id
name
表格类别
tbl_categories
id
name
从上面可以看到,sub_category_id是产品表中的外键,它与子类别表中的id相关。子类别表中有一个category_id,它是类别表中的外键
现在,我想获取属于某个类别的所有项目。
所以我尝试过
$categories = Categories::where('id',7)->first();
//from categories get subcategoryid
$allsubcategories = Subcategories::where('category_id',$categories->id)->pluck('id')
$allitems = Items::where('status',1)->wherein('sub_category_id',$allsubcategories)
以上工作。但是有没有更整洁的方法呢?
答案 0 :(得分:2)
将hasManyThrough
模型中的Category
关系定义为Item
模型。
// on the Category Model
public function items() {
return $this->hasManyThrough(Items::class, Subcategories::class);
}
然后您就可以访问属于特定items
的所有category
// On your Controller
$category = Categories::where('id',7)->first();
$items = $category->items
官方文档-https://laravel.com/docs/5.7/eloquent-relationships#has-many-through
答案 1 :(得分:1)
好吧,您可以尝试使用嵌套的渴望加载,这应该会更有效:
//Assuming the relationships are named subCategories() on Categories model & items() on Subcategories model
$cat = Categories::where('id', 7)
->with('subCategories.items')
->get()
->first();
这将使用所有子类别以及每个子类别中的所有项目以最少的查询量来加载类别。