Mit Laravel 5.1 versuche ich eine Menüliste aus einer MySQL-Kategorietabelle zu erstellen. Mein Dienstanbieter gibt Daten zurück, aber ich verstehe nicht, wie die untergeordneten Kategorien in einer foreach-Schleife erstellt werden. Wenn ich die Schleife ausführe, wird nur die letzte Zeile der untergeordneten Abfrage zurückgegeben. Jede Anleitung würde geschätzt werden.Laravel gibt Kinder von Eltern in derselben Tabelle zurück
Kategorien Tabelle
id | cat_name | cat_parent_id
--- | --------------| -------------
1 | Parent Cat 1 | NULL
2 | Parent Cat 2 | NULL
3 | Child Cat 1 | 2
4 | Child Cat 2 | 2
5 | Parent Cat 3 | NULL
6 | Child Cat 3 | 5
Gewünschtes Ergebnis
Parent Cat 1
Parent Cat 2
Child Cat 1
Child Cat 2
Parent Cat 3
Child Cat 3
viewComposerServiceProvider.php
public function boot()
{
$this->composeTopCategoryNavigation();
$this->composeSubCategoryNavigation();
}
private function composeTopCategoryNavigation()
{
view()->composer('partials.header', function($view)
{
$view->with('top_cats', Category::whereNull('cat_parent_id')->orderBy('cat_name', 'asc')->get());
});
}
private function composeSubCategoryNavigation()
{
view()->composer('partials.header', function($view)
{
$view->with('sub_cats', Category::whereNotNull('cat_parent_id')->orderBy('cat_name', 'asc')->get());
});
}
Kopfsicht
<ul>
@foreach ($top_cats as $top_cat)
<?php $top_cat_slug = str_slug($top_cat->cat_name, "-"); ?>
<li>{{ $top_cat->cat_name }}
@foreach ($sub_cats as $sub_cat)
@if ($sub_cat->cat_parent_id === $top_cat->id)
<ul>
<li{{ $sub_cat->cat_name }}</li>
</ul>
@endif
@endforeach
</li>
@endforeach
</ul>