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

I have the following table structure

tables

 tbl_items
   id
   sub_category_id //foreign key

table subcategories

  tbl_subcategories
     id
     category_id
     name

table categories

   tbl_categories
      id
       name

As you can see from the above the sub_category_id is a foreign key in products table which relates to the id in the subcategories table. the subcategories table have a category_id which is a foreign key from the categories table

Now i wanted to fetch all items belonging to a certain category.

so i have tried

$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)

The above works. but is there a neater way to do this?

Well you could probably try using Nested Eager Loading, which should be a little more efficent:

//Assuming the relationships are named subCategories() on Categories model & items() on Subcategories model
$cat = Categories::where('id', 7)
           ->with('subCategories.items')
           ->get()
           ->first();

That should load the category w/ all the subCategories and all the items within each subCategories with the least amount of queries.

define a hasManyThrough relationship in the Category model to the Item model.

// on the Category Model
public function items() {
    return $this->hasManyThrough(Items::class, Subcategories::class);
}

then you can access all the items belongs to a particular category

// On your Controller
$category = Categories::where('id',7)->first();
$items = $category->items

official documentation - https://laravel.com/docs/5.7/eloquent-relationships#has-many-through