如何在 laravel 中使用嵌套的 foreach 循环来填充子菜单?

How to use nested foreach loop in laravel for populating submenus?

我需要使用 Laravel 填充菜单栏子菜单。菜单正在填充,但子菜单不起作用。

这是我的 blade 文件。

@foreach($categories as $c)    
  <li class="nav-item hs-has-mega-menu u-header__nav-item"
           data-event="hover"
           data-animation-in="slideInUp"
           data-animation-out="fadeOut"
           data-position="left">
           <a id="basicMegaMenu" class="nav-link u-header__nav-link u-header__nav-link-toggle" href="javascript:;" aria-haspopup="true" aria-expanded="false">{{ $c ['cat_name'] }}</a>

            <div class="hs-mega-menu vmm-tfw u-header__sub-menu" aria-labelledby="basicMegaMenu">
                <div class="row">
                    <div class="row u-header__mega-menu-wrapper">
                         <ul id="sidebarNav1" class="list-unstyled dropdown-list">
                             <!-- Menu List -->
                             @foreach($category->categories as $z)
                                <li>
                                    <a class="dropdown-item" href="#">{{ $z ['cat_name'] }}<span class="text-gray-25 font-size-12 font-weight-normal"> (56)</span>
                                    </a>
                                </li>
                             @endforeach
                             <!-- End Menu List -->
                        </ul>
                   </div>
                 </div>
             </div>
        </li>
  @endforeach

这是我的控制器。

家庭控制器

 public function landing_page()
    {
        $categories = Category::all();
     
        $products = Product::get();
        return view ('index',compact('products','categories'));
    }

这是我的类别模型。

class Category extends Model
{
    public function products()
    {
       return $this->hasMany(Product::class);
    }
    
    public function parent()
    {
        return $this->belongsTo(self::class);
    }
    
    public function children()
    {
        return $this->hasMany(self::class, 'parent_id');
    }
}

谁能指导我解决这个问题?

$category->categories$category->children

但您的代码在开始时无效 $categories as $c 比你尝试 $category,

什么是 $category 变量? 您应该将 $category 替换为 $c

尝试第一个获取所有 ParentCatrgory 然后在循环中你可以调用单个 ParentCatrgory childs

家庭控制器

public function landing_page()
{
    $categories = Category::where('parent_id',0)->with('children')->get(); // all parent category
    
    $products = Product::get();
    return view ('index',compact('products','categories'));
}
@foreach($categories as $category)    
  <li class="nav-item hs-has-mega-menu u-header__nav-item"
           data-event="hover"
           data-animation-in="slideInUp"
           data-animation-out="fadeOut"
           data-position="left">
           <a id="basicMegaMenu" class="nav-link u-header__nav-link u-header__nav-link-toggle" href="javascript:;" aria-haspopup="true" aria-expanded="false">{{ $category['cat_name'] }}</a>

            <div class="hs-mega-menu vmm-tfw u-header__sub-menu" aria-labelledby="basicMegaMenu">
                <div class="row">
                    <div class="row u-header__mega-menu-wrapper">
                         <ul id="sidebarNav1" class="list-unstyled dropdown-list">
                             <!-- Menu List -->
                             @foreach($category->children as $childrenCategory)
                                <li>
                                    <a class="dropdown-item" href="#">{{ $childrenCategory['cat_name'] }}<span class="text-gray-25 font-size-12 font-weight-normal"> (56)</span>
                                    </a>
                                </li>
                             @endforeach
                             <!-- End Menu List -->
                        </ul>
                   </div>
                 </div>
             </div>
        </li>
  @endforeach