简体   繁体   English

仅当有带有Laravel的产品时在菜单上显示子类别

[英]Showing Sub-categories on menu only if has products with Laravel

I have simple query which populate menu with Main categories and sub-categories. 我有一个简单的查询,其中包含主类别和子类别的菜单。 This work perfectly 这个工作完美

  // in controller
$cat=Categories::all(); 
View::share('categories_menu',$cat); 

 // in view
 @foreach($categories_menu as $category_menu)
    @if($category_menu->has('subcategories'))
         <ul class="nav nav-stacked cat-nav">
              <li>
                  <a href="#">{{ $category_menu['category_name'] }} </a>
                        @if($category_menu->subcategories->count())
                          <ul>
                            @foreach($category_menu->subcategories as $subcategory)
                              <li class=""><a href="#">{{$subcategory->sub_cat_name}}</a></li>
                            @endforeach
                          </ul>
                        @endif
               </li>
            @else
               <li><a href="#"><i class="fa fa-link"></i> <span>{{ $category_menu->category_name }}</span></a></li>
            @endif
        </ul>
@endforeach

This make output like 这使输出像

Main Category
   -Sub Cat
   -Sub Cat
Second main category
   -Sub in second main category
   ...

The problem is that it is loading also sub-categories which are empty. 问题在于它还加载了空的子类别。 I don't want to show them and I tried to change the query with joining all three tables - category , sub_categories , products 我不想显示它们,我尝试通过连接所有三个表( categorysub_categoriesproducts来更改查询

This is the query so far 这是到目前为止的查询

$cat = Categories::select('*', DB::raw('category.category_id AS category_id'))
    ->leftJoin('products', function($join) {
             $join->on('products.category_id', '=', 'category.category_id'); 
           })
    ->leftJoin('sub_category', function($secondjoin){
            $secondjoin->on('sub_category.category_id', '=', 'category.category_id');
           })
    ->whereNotNull('products.sub_cat_id')
    ->get();

The result is strange ( image ) 结果很奇怪(图片) 在此处输入图片说明

It's should show me only two main categories each with one sub. 应该只显示两个主要类别,每个类别都有一个子类别。 On the image you can see my product table 在图片上您可以看到我的产品表

Category 1
  -sub1
Category 2
  -sub3

在此处输入图片说明

If need some more source or something i can provide. 如果需要更多资源或我可以提供的东西。

Update with models: 型号更新:

Categories model 类别模型

class Categories extends Eloquent {
    protected $table = 'category';
    protected $primaryKey = 'category_id';

    public $timestamps = false;

    public function products()
    {
        return $this->hasMany('Product', 'category_id');

    } 
    public function subcategories()
    {
        return $this->hasMany('SubCategories', 'category_id');
    } 
}

SubCategories model 子类别模型

class SubCategories extends Eloquent {
    protected $table = 'sub_category';
    protected $primaryKey = 'sub_cat_id';

    public $timestamps = false;

    public function category()
    {
        return $this->belongsTo('Category', 'category_id');
    }

    public function products()
    {
       return $this->hasMany('Product', 'sub_cat_id');
    } 
}

Products model 产品型号

class Product extends Eloquent {
    protected $table = 'products';
    protected $primaryKey = 'product_id';

    public function categories()
    {
        return $this->hasMany('Categories', 'category_id');
    }

    public $timestamps = false;
}
 @foreach($categories_menu as $category_menu)
    @if($category_menu->has('subcategories'))
         <ul class="nav nav-stacked cat-nav">
              <li>
                  <a href="#">{{ $category_menu['category_name'] }} </a>
                        @if($category_menu->subcategories->count())
                          <ul>
                            @foreach($category_menu->subcategories as $subcategory)
                              @if($subcategory->products->count())
                                 <li class=""><a href="#">{{$subcategory->sub_cat_name}}</a></li>
                              @endif
                            @endforeach
                          </ul>
                        @endif
               </li>
            @else
               <li><a href="#"><i class="fa fa-link"></i> <span>{{ $category_menu->category_name }}</span></a></li>
            @endif
        </ul>
@endforeach

I added a condition for subcatergy to be displayed only if their products count is above 0. 我添加了一个条件,即仅当其产品计数大于0时才显示子类别。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM