Ich habe einfache Abfrage, die Menü mit Hauptkategorien und Unterkategorien füllen. Diese Arbeit perfektZeige Unterkategorien auf Menü nur, wenn Produkte mit 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
Diese machen eine Ausgabe wie
Main Category
-Sub Cat
-Sub Cat
Second main category
-Sub in second main category
...
Das Problem ist, dass es Laden auch Untergruppen ist, die leer sind. Ich will nicht, ihnen zeigen, und ich versuchte, die Abfrage mit dem Beitritt alle drei Tabellen zu ändern - category
, sub_categories
, products
Dies ist die Abfrage so weit
$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();
Das Ergebnis ist seltsam (Bild)
Es sollte mir nur zwei Hauptkategorien mit jeweils einem Unter zeigen. Auf dem Bild können Sie meine Produkttabelle
Category 1
-sub1
Category 2
-sub3
Wenn brauchen etwas mehr Quelle oder etwas sehe ich zur Verfügung stellen kann.
-Update mit den Modellen:
Kategorien Modell
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');
}
}
Unterkategorien Modell
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');
}
}
Produkte Modell
class Product extends Eloquent {
protected $table = 'products';
protected $primaryKey = 'product_id';
public function categories()
{
return $this->hasMany('Categories', 'category_id');
}
public $timestamps = false;
}
Sie sollten sich Eloquant Beziehungen suchen Sie sparen eine Menge Aufwand – Vuldo
Ich habe sie schon .. Art von .. Ich habe gemacht Beziehungen zwischen Tabellen in meinen Modellen.,. –
Können Sie sie in Ihrem Hauptpost hinzufügen? Es wird einfacher sein, dass eine große Abfrage – Vuldo