“过滤器”表如下所示:
id | group | label | value
----+----------+-------------------+----------------
12 | deadline | 1 to 3 days | 1 AND 3
14 | price | Any | 0
15 | price | Less than 1000 | 0 AND 1000
16 | price | 1000 to 10000 | 1000 AND 10000
22 | location | Any | 0
23 | location | New York | newyork
24 | location | California | california
25 | location | Alabama | alabama
我需要在“组”下显示“标签”块。
我的控制器:
public function index(){
$filters = Filters::all();
return view('frontend.request', compact('filters'));
}
我的观点有:
<?php foreach ($filters as $filter) { ?>
<div class="panel panel-default">
<b>{{ $filter->group }}</b>
<div id="collapseOne1" class="panel-collapse collapse in">
<div class="panel-body">
<div class="checkbox">
<label><input type="checkbox" name="{{ $filter->group }}" value="{{ $filter->any }}">{{ $filter->label }}</label>
</div>
</div>
</div>
</div>
<?php } ?>
我想在一个框内显示该组下的所有标签,依此类推。上面的代码为每个标签创建了不同的框,这是不正确的。
我相信,它必须是嵌套循环,但我很难在Laravel上编写它。知道应该如何吗?
注意:这个帖子给出了部分答案,但在我的情况下我们不知道块大小:Laravel 5.1 - Nested Loop - Blade Templating
答案 0 :(得分:1)
您可以使用Laravel的groupBy()
收集方法;
https://laravel.com/docs/5.4/collections#method-groupby
控制器:
public function index(){
$filters = Filters::all();
$groups = $filters->groupBy('group');
return view('frontend.request', compact('groups'));
}
查看:
@foreach ($groups as $group => $filters)
<div class="panel panel-default">
<b>{{ $group }}</b>
@foreach($filters as $filter)
<div id="collapseOne1" class="panel-collapse collapse in">
<div class="panel-body">
<div class="checkbox">
<label><input type="checkbox" name="{{ $filter->group }}" value="{{ $filter->any }}">{{ $filter->label }}</label>
</div>
</div>
</div>
@endforeach
</div>
@endforech