只有当产品带有Laravel时,才能在菜单上显示子类别
我有一个简单的查询,它用主类别和子类别填充菜单。这项工作非常只有当产品带有Laravel时,才能在菜单上显示子类别
// 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
本作输出像
Main Category
-Sub Cat
-Sub Cat
Second main category
-Sub in second main category
...
的问题是,它是装也分类别,其是空的。我不想告诉他们,我试图与加入所有三个表更改查询 - category
,sub_categories
,products
这是查询到目前为止
$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();
它应该显示我只有两个主要类别,每个都有一个子。在图像,你可以看到我的产品表
Category 1
-sub1
Category 2
-sub3
如果需要一些更多的源或东西我可以提供。
更新配车型:
分类模型
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');
}
}
小类模型
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');
}
}
产品型号
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
我添加了一个条件subcatergy要显示,只有当他们的产品计数是在0以上
谢谢。但用哪个查询?因为我得到与图像相同的结果,但子类别在图像上没有一次出现过两次 –
啊,明白了。通过初始查询'$ cat = Categories :: all();' –
是的,初始查询 – Vuldo
你应该看看Eloquant关系,你会省下很多努力 – Vuldo
我已经把它们..有点..我做了我的模型中表格之间的关系。 –
你可以将它们添加到你的主文章中吗?做一个巨大的查询会更容易 – Vuldo