2016-08-10 4 views
0

я следующая структуру, просто прикрепление скриншота для справки, рассмотрите прикрепленный файл моего SQL SchemaLaravel группы красноречивого запроса по

enter image description here

Это то, что я пытаюсь получить

$array = [ 
    [ 
     'city' => 1, 
     'google'=> [4,2] 
    ], 
    [ 
     'city' => 2, 
     'google'=> [3,2,1] 
    ], 
]; 

Я использовал Postgresql

Я пробовал с группой, хотя никакой логики позади моего i реализация, магия в ларавеле

$models = Model::groupBy('city')->get(); 

Может кто поможет найти путь?

Мысль о том, чтобы делать это через цикл, но хотела бы знать эффективный способ его выполнения.

+0

город должен иметь 4 и 3 в соответствии с файлом, правильно? –

+0

@DanyalSandeelo да ты прав – overflow

ответ

2
$models = Model::groupBy('city')->selectRaw('city, GROUP_CONCAT(google) as google')->get(); 

Попробуйте это. Это приведет к объединению результата для mysql.

$models = Model::groupBy('city')->selectRaw('city, array_agg(google) as google')->get(); 

согласно here, существует альтернативный для GROUP_CONCAT в Postgres.

+0

Это postgresql, а не mysql – overflow

+0

http://stackoverflow.com/questions/2560946/postgresql-group-concat-equivalent Это эквивалентный метод для group_concat. –

+0

Да, он работает, но он находится в другом формате массива, как будто он возвращает {4,2} вместо [4,2] – overflow

1

Вы можете запросить непосредственно как этот

$resultSet = DB::select(DB::raw(" SQL QUERY HERE")); 

и в моделях вы можете сделать это, как

$resultSet = DB::table('table_name') 
      ->groupBy('column_name') 
      ->get(); 

В то время как в вашем случае, если вы не будете нуждаться в группе, вам нужно будет group_concat. Посмотрите здесь http://www.w3resource.com/mysql/aggregate-functions-and-grouping/aggregate-functions-and-grouping-group_concat.php

Вот что я сделал:

enter image description here

Для PostGreSQL использовать этот синтаксис

SELECT city, 
    string_agg(google, ',') 
    FROM test 
    GROUP BY city 
+0

, но я не думаю, что это даст мне ожидаемый результат – overflow

+0

на самом деле это Postgresql – overflow

+0

@overflow обновленный ответ –

Смежные вопросы