Предполагая, что это отношение «один ко многим», то есть одна категория может принадлежать только какой-то другой категории (один родитель)
И ваша модель Category
должна выглядеть примерно так:
public function parent() {
return $this->belongsTo('App\Category');
}
public function children() {
return $this->hasMany('App\Category');
}
В вашем main
шаблоне блейда у вас есть:
<ul class="navbar-nav">
@foreach ($menu_items as $item)
@include('menu', $item)
@endforeach
</ul>
Где $menu_items
- список всех родительских категорий (категорий, где category_id равен нулю или 0)
И ваш menu
шаблон блейда:
@if ( $item->children->isNotEmpty() )
<li class="nav-item {{ $item->parents->isNotEmpty() ? 'dropdown-submenu' : 'dropdown' }}">
<a class="nav-link dropdown-toggle" href="{{ $item->slug ? url($item->slug) : 'javascript:void(0);' }}" id="navbarDropdown{{ $item->id }}" role="button" data-toggle="hover">
{{ $item->title }}
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown{{ $item->id }}">
@foreach ($item->children as $item)
@include('menu', $item)
@endforeach
</ul>
@else
<li class="nav-item">
<a class="nav-link" href="{{ $item->slug ? url($item->slug) : 'javascript:void(0);' }}">{{ $item->title }}</a>
@endif
</li>
Я буквально вставил этот код из проекта, над которым я недавно работал, чтобы дать вам представление о вложенном раскрывающемся списке, вы должны работать над стайлинг часть себя. Но этого кода достаточно, чтобы дать вам правильное понимание.
PS: все это не проверено. дайте мне знать, если что-то не работает