Ya tengo funcionando mi migración de modelo, controlador y base de datos y puedo recuperar la visualización de los datos.

Clientes.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();
});

}

Lo que intento hacer es formatear los datos y agruparlos por geografía pasando el parámetro url

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

Y agruparlas como:

América del Norte Estados Unidos

Aetna | Vista a la bahia

CANADÁ Frontier | Corte federal

Ejemplo 2: /our-clients.php?geography=Europe EUROPA BÉLGICA

Digip | Sonic

DINAMARCA Skandina | Policia nacional

¿Alguna idea?

1
kangular 23 ene. 2018 a las 06:46

3 respuestas

La mejor respuesta

¿Se lee como si quisieras filtrar por geografía? O agrupar por? Pero si es lo último, ¿por qué tienes ese parámetro get? No del todo claro.

Entonces, si desea filtrar, obviamente debe incluir un where ('geography', request () -> geography) en su consulta.

También puede obtener todo y filtrar luego con el método filter ()
https://laravel.com/docs/5.5/collections#method-filter

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

Sugeriría la versión Eloquent, si no necesita las otras regiones en ningún otro lugar.

Si desea agrupar por país, le sugeriría
https://laravel.com/docs/5.5/collections#method-maptogroups

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

Intente esto una vez más para ver el resultado e intente comprenderlo.
Luego puede pasar por esa colección con 2 foreach anidados en su archivo Blade como

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

Si quería un grupo desde el principio en lugar de un filtro, obviamente puede realizar 2 mapToGroups () en su proceso, solo juegue un poco por un momento;)

1
Inuyaki 23 ene. 2018 a las 08:00

Use groupBy() después de obtener todos los registros para obtenerlo como group of records asociado con geography.

$table_companies = Clients::selectRaw(' name_company company, geography geography, country country, type_industry industry, emphasize bold')   
  ->get()
  ->groupBy('geography')
  ->toArray();
1
Sohel0415 23 ene. 2018 a las 05:17

Cambiaría su cláusula groupBy para usar los parámetros de solicitud:

...
->groupBy('company', request()->get('geography'), 'country', 'industry', 'bold')
->get()
->toArray()
1
user320487user320487 23 ene. 2018 a las 03:54