Laravel使用集合对重复的表条目进行分组

时间:2016-10-07 03:51:17

标签: php mysql collections laravel-5 group-by

好的,所以我试图获得使用集合的语法。 laravel文档和示例现在对我没有任何意义。没有人真正在谈论集合,所以:

我有两个表条目,一个用于区域,一个用于国家/地区。我希望能够按地区分组国家/地区,因此不会打印重复区域。在PHP中它是有道理的。但是在laravel中,我不知道他们的语法是如何工作的。

我想得到这样的东西:

A区

  • 国家A
  • 国家B
  • 国家C

A区

  • 国家A
  • 国家B

等等

那么它是如何完成的?

这是我的控制者:

    <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use DB;
use App\Http\Requests;

class SortController extends Controller
{

    public function index(){
        $infos = DB::table('list_countries')
            ->select('Region', 'Country')
            ->groupBy('Region')
            ->get();

       // $sorts = DB::table('list_countries')->get();
        return view('Sort', compact('infos'));
    }
}

这是我的破旧刀片文件:

@extends('layout')


@section('content')
    <h1>Hello</h1>
                @extends('layout')


@section('content')
    <h1>Hello</h1>
                @foreach($infos as $sort)

                    <div class="checkbox">
                        <label>
                            {!! Form::checkbox('agree', 'yes') !!} {{ $sort }}
                        </label>
                    </div>
                @endforeach
@stop

测试@Ray Cheng的建议:

然而它打印出来:

[{&#34; Region&#34;:&#34; Africa - North Africa&#34;,&#34; Country&#34;:&#34; Algeria&#34;},{&#34;地区&#34;:&#34;非洲 - 北非&#34;,&#34;国家&#34;:&#34;埃及&#34;},{&#34;地区&#34;:&#34;非洲 - 北非&#34;,#34;国家&#34;:&#34;利比亚&#34;},{&#34;地区&#34;:&#34;非洲 - 北非&#34;,& #34;国家&#34;:&#34;马里&#34;},{&#34;地区&#34;:&#34;非洲 - 北非&#34;,&#34;国家&#34;:& #34; Mauritania&#34;},{&#34; Region&#34;:&#34; Africa - North Africa&#34;,&#34; Country&#34;:&#34; Morocco&#34;}, {&#34;地区&#34;:&#34;非洲 - 北非&#34;,&#34;国家&#34;:&#34;尼日尔&#34;},{&#34;地区&#34; :&#34;非洲 - 北非&#34;,&#34;国家&#34;:&#34;突尼斯&#34;},{&#34;地区&#34;:&#34;非洲 - 北非& #34;,&#34;国家&#34;:&#34;西撒哈拉&#34;}]

请注意,这是一个类别,groupby正在运行,但它包括它所分组的对象。

数据库表如下所示:

Database tables

1 个答案:

答案 0 :(得分:1)

您需要做的是使用集合函数groupBy

$infos = DB::table('list_countries')
        ->select('Region', 'Country')
        ->get()
        ->groupBy('Region')
        ->toArray();