首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel Mega菜单循环

Laravel Mega菜单循环
EN

Stack Overflow用户
提问于 2021-10-13 07:16:33
回答 4查看 134关注 0票数 0

我正在学习laravel,并试图创建一个Megamenu。但是我可以调用家长菜单,我堆叠在第一个孩子和第二个孩子。

每个父级下都有相同的子级。

代码语言:javascript
运行
复制
<div class="navbar-mega">
    <div class="dropdown-mega">
        @php
        $categories = App\Models\Category::where('parent_id', 0)->orderBy('order_level','ASC')->get();
        @endphp
        @foreach ($categories as $item)
            <button class="dropbtn-mega"> {{$item->id}}</button>
        @endforeach
        <div class="dropdown-content-mega">
            <div class="row-mega">
                @php
                $subcategories = App\Models\Category::where('parent_id',
                $item->id)->orderBy('name','ASC')->get();
                @endphp
                @foreach ($subcategories as $subcategory)
                    <div class="column-mega">
                        <h3>{{$subcategories}}</h3>
                        <a href=""></a>
                    </div>
                @endforeach
            </div>
        </div>
    </div>
</div>

Database Fields

Subcategory Query Output

EN

回答 4

Stack Overflow用户

发布于 2021-10-13 07:29:32

这段代码:

代码语言:javascript
运行
复制
$subcategories = App\Models\Category::where('parent_id',$item->id)->orderBy('name','ASC')->get();

作为$item不在通过$categories的循环中。因此,当它被执行时,它还将返回相同的类别集(因为在代码中,$item在这一点上始终是相同的值。

将其放入循环中:

代码语言:javascript
运行
复制
@foreach ($categories as $item)
    <button class="dropbtn-mega"> {{$item->id}}</button>
    <div class="dropdown-content-mega">
        <div class="row-mega">
            @php
            $subcategories = App\Models\Category::where('parent_id',
            $item->id)->orderBy('name','ASC')->get();
            @endphp
            @foreach ($subcategories as $subcategory)
                <div class="column-mega">
                    <h3>{{$subcategories}}</h3>
                    <a href=""></a>
                </div>
            @endforeach
        </div>
    </div>
@endforeach

它应该工作得很好。

票数 0
EN

Stack Overflow用户

发布于 2021-10-13 07:30:27

你可以使用append来获取子类别,在你的类别模型中使用这个,

代码语言:javascript
运行
复制
protected $appends = [
    'sub_categories'
];


public function getSubCategoriesAttribute()
{
    return Category::where('parent_id', $this->id)->orderBy('name','ASC')->get();
}
代码语言:javascript
运行
复制
<div class="navbar-mega">
    <div class="dropdown-mega">
        @php
        $categories = App\Models\Category::where('parent_id', 0)->orderBy('order_level','ASC')->get();
        @endphp
        @foreach ($categories as $category)
            <button class="dropbtn-mega"> {{ $category->id }}</button>
        @endforeach
        <div class="dropdown-content-mega">
            <div class="row-mega">
                @foreach ($category->sub_categories as $subCategory)
                    <div class="column-mega">
                        <h3>{{ $subCategory->name }}</h3>
                        <a href=""></a>
                    </div>
                @endforeach
            </div>
        </div>
    </div>
</div>
票数 0
EN

Stack Overflow用户

发布于 2021-10-13 07:39:04

在控制器中使用以下代码的更好方法。并在模型中创建关系。

代码语言:javascript
运行
复制
$categories = App\Models\Category::where('parent_id', 0)->orderBy('order_level','ASC')->get();

在模型中使用子父关系:

代码语言:javascript
运行
复制
public function children()
{
    return $this->hasMany(Category:Class,'parent_id');
}

并使用with获取父子树

代码语言:javascript
运行
复制
$categories = App\Models\Category::with('children)->where('parent_id', 0)->orderBy('order_level','ASC')->get();

您可以使用以下命令进行检查

代码语言:javascript
运行
复制
dd($categories);

并且可以很容易地在上面使用循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69551191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档