Laravel 5.4带有分组数据集的嵌套循环

时间:2017-09-08 15:51:44

标签: php laravel loops nested

“过滤器”表如下所示:

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

1 个答案:

答案 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