Laravel雄辩地获得属于某个类别的物品

时间:2018-10-03 01:47:37

标签: php laravel

我具有以下表格结构

表格

 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)

以上工作。但是有没有更整洁的方法呢?

2 个答案:

答案 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();

这将使用所有子类别以及每个子类别中的所有项目以最少的查询量来加载类别。