Laravel Eloquent - 使用Eloquent按地区对客户记录进行排序

时间:2018-01-23 03:46:24

标签: php laravel laravel-eloquent

我的模型,控制器和数据库迁移已经正常工作,我可以检索显示数据。

clients.blade.php

@foreach ($table_companies as $client)
    {{ $client['geography'] }} - {{ $client['company'] }} - {{ $client['country'] }} - {{$client['industry'] }}
@endforeach

ClientsController.php

public function showClients() {

    $table_companies = Clients::selectRaw(' name_company company, geography geography, country country, type_industry industry, emphasize bold')   
      ->groupBy('company', 'geography', 'country', 'industry', 'bold')
      ->get()
      ->toArray();

    return view('about.our-clients', compact('our-clients', 'table_companies'));

2017_12_12_173246_create_clients_table.php

Schema::create('table_companies', function (Blueprint $table) {
    // $table->increments('id');
    // $table->timestamps();
    $table->increments('ID_CLIENT');
    $table->string('NAME_COMPANY');
    $table->string('TYPE_INDUSTRY');
    $table->string('COUNTRY');
    $table->string('GEOGRAPHY');
    $table->integer('emphasize');
    $table->timestamps();
});

}

我要做的是格式化数据并按地理位置传递url参数

对其进行分组

示例1:/our-clients.php?geography=North_America

将他们分组为:

北美洲 USA

Aetna |景

CANADA 前沿|联邦法院

示例2:/our-clients.php?geography=Europe 欧洲 比利时

Digip | Sonoc

丹麦 Skandina |国家警察

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您可以将groupBy子句更改为使用请求参数:

...
->groupBy('company', request()->get('geography'), 'country', 'industry', 'bold')
->get()
->toArray()

答案 1 :(得分:1)

获取所有记录后使用groupBy()将其作为group of recordsgeography的关联。

$table_companies = Clients::selectRaw(' name_company company, geography geography, country country, type_industry industry, emphasize bold')   
  ->get()
  ->groupBy('geography')
  ->toArray();

答案 2 :(得分:1)

它看起来好像要过滤地理位置?还是分组?但如果是后者,为什么你有这个参数?不太清楚。

因此,如果您想过滤,您显然应在查询中包含where('geography',request() - > geography)。

您也可以使用filter()方法获取所有内容并进行过滤 https://laravel.com/docs/5.5/collections#method-filter

$filtered_table_companies = $table_companies->filter(function ($value, $key) {
    return $value->geography == request()->geography;
});

如果您不需要其他地方的其他地区,我会建议使用Eloquent版本。

如果你想按国家分组,我会建议你 https://laravel.com/docs/5.5/collections#method-maptogroups

$grouped_table_companies = $table_companies->mapToGroups(function ($item, $key) {
    return [$item->geography] => $item;
});

尝试修改一次以查看其输出并尝试理解它 然后,您可以在刀片文件中使用2个嵌套的foreach遍历该集合,例如

@foreach($grouped_table_companies as $region => $regional_table_companies)
    <div>{{ $region }}</div>
    @foreach($regional_table_companies as $table_company)
        // output stuff here
    @endforeach
@endforeach

如果你想早期使用groupby而不是过滤器,你可以在你的过程中显然执行2个mapToGroups(),只需稍微修改一下;)