【发布时间】:2017-12-20 21:09:27
【问题描述】:
我正在尝试在 laravel 中动态显示菜单。
我有两张桌子,一张是主类别,另一张是子类别
这是Category表的结构
----------------------------------
| id | title | slug | type |
| 1 | title1 | slug1 | Android |
| 2 | title2 | slug2 | Android |
| 3 | title3 | slug3 | Android |
| 4 | title4 | slug4 | Ubuntu |
| 5 | title5 | slug5 | Ubuntu |
----------------------------------
子类别结构
-----------------------------------------------
| id | title | slug | category_of|
| 1 | title1 | slug1 | 1 |
| 2 | title2 | slug2 | 1 |
| 3 | title3 | slug3 | 1 |
| 4 | title4 | slug4 | 2 |
| 5 | title5 | slug5 | 1 |
-----------------------------------------------
这是我尝试过的
<?php
$category = App\Models\Menu::where('categories.type', 'Android')
->select('categories.*', 'sub_category.slug as sub_slug', 'sub_category.title')
->join('sub_category', 'sub_category.category_of', '=', 'categories.id')
->get();
?>
@foreach ($category as $value)
<li class="inner-dropdown-item">
<p>
<a href="{{ Config::get('constants.url.BASE_URL') }}category/{{$value->slug}}/">{{ucwords(str_replace('-', ' ', $value->slug))}}</a>
</p>
</li>
<li class="inner-dropdown-item">
<a href="{{ Config::get('constants.url.BASE_URL') }}category/{{$value->sub_slug}}/{{$value->sub_slug}}">{{ucwords(str_replace('-', ' ', $value->sub_slug))}}</a>
</li>
@endforeach
我面临的问题是,由于 foreach 循环,它每次都复制主类别,例如
<li class="inner-dropdown-item">
<p>
<a href="/category/android/">Android</a>
</p>
</li>
<li class="inner-dropdown-item">
<a href="/category/android/calendars">Calendars</a>
</li>
<!-- /INNER DROPDOWN ITEM -->
<!-- /This Below Android category should not be shown again -->
<li class="inner-dropdown-item">
<p>
<a href="/category/android/">Android</a>
</p>
</li>
<li class="inner-dropdown-item">
<a href="/category/android/database-abstractions">Database Abstractions</a>
</li>
如您所见,每次显示子类别时都会复制主类别。我如何显示主类别一次,然后在其下显示所有子类别
我有另一个具有不同菜单 HTML 结构的模板
<!-- MENU ITEM -->
<li class="menu-item sub">
<a href="#">
Designer
<!-- SVG ARROW -->
<svg class="svg-arrow">
<use xlink:href="#svg-arrow"></use>
</svg>
<!-- /SVG ARROW -->
</a>
<div class="content-dropdown">
<!-- FEATURE LIST BLOCK -->
<?php $m_des = ''; ?>
@foreach ($design_category as $des_value)
@if($m_des != $des_value->slug)
<div class="feature-list-block">
<a href="{{ Config::get('constants.url.BASE_URL') }}category/{{$des_value->slug}}/">
<h6 class="feature-list-title">{{ucwords(str_replace('-', ' ', $des_value->slug))}}</h6></a>
<hr class="line-separator">
<?php $m_des = $des_value->slug; ?>
@endif
<!-- FEATURE LIST -->
<ul class="feature-list">
<li class="feature-list-item">
<a href="{{ Config::get('constants.url.BASE_URL') }}category/{{$des_value->slug}}/{{$des_value->sub_slug}}/">{{ucwords(str_replace('-', ' ', $des_value->sub_slug))}}</a>
</li>
</ul>
<!-- /FEATURE LIST -->
</div>
@endforeach
</div>
</li>
<!-- /MENU ITEM -->
它一次又一次地生成 ul 和 div 导致 html 错误
【问题讨论】:
-
您使用的
join没有group,因此每个条目会获得多行,具体取决于sub_categories的数量 -
@colburton 我如何按组进行操作?
标签: php mysql laravel laravel-5