My aim is to not display the category which don’t have any products as of now.
I have a drop-down list having all the category (level down to sub-category as well)
which giving me the following results.
Electronics
- media
- speaker
- DVDs
- Computers
Clothing
- Mens
- Shirt
- Jeans
- Women
Craft
But, I want to achieve following results
Electronics
- media
- speaker
- Computers
Clothing
- Mens
- Shirt
The database tables are following
categories id | name | parent_id ----------------------------- 1 | Electronics| null 2 | media | 1 3 | Clothing | null 4 | Craft | null 5 | Mens | 3 6 | Women | 3 7 | Shirt | 5 8 | Jeans | 5 9 | speaker | 2 10 | DVDs | 2 11 | Computers | 1 products id | p_name | p_cat_id --------------------------------------- 1 | Cotten shirt for men | 7 2 | New Jeans bla bal | 7 3 | Custome gaming pc 1 | 11 4 | Custome gaming pc 2 | 11 5 | Bluetooth speaker | 9
Category model
public function subCategory(){
return $this->hasMany(Category::class, 'parent_id');
}
public function products(){
return $this->hasMany(Product::class,'p_cat_id','id')->where('status','=', 1);;
}
I have tried following to get category list. which gives me all the categories and sub categories
function getCategory() {
return Category::where([['parent_id', '=', null], ['status', '=', 1]])->orderBy("name", "ASC")->get();
}
Advertisement
Answer
If you need to filter out that only showing category which has least one product:
$categories = Category::with('products')->has('products')->get();
It is a simple function ->has() will check category has any products.
function getCategory() {
$categories = Category::with('products')->has('products')->get();
return $categories;
}
UPDATE:
To make it work for sub-categories, I have fixed it for myself as following
in Helper:
function getSubcategory($catid) {
return Category::where([['parent_id', '=', $catid], ['status', '=', 1]])
->with('products')->has('products')->get();
}
In, Blade file:
@if(count( getSubcategory( $category->id )) > 0)
@include('category.subCategoryList',['subcategories' => getSubcategory( $category->id )])
@endif
Hope it will working for others too.