我有以下结构,只是附上截图供参考,考虑附加的图像是我的sql架构
这就是我想要的
$array = [
[
'city' => 1,
'google'=> [4,2]
],
[
'city' => 2,
'google'=> [3,2,1]
],
];
我使用过 Postgresql
虽然我的实施背后没有任何逻辑,但是我尝试了小组,没有任何魔法参与laravel
$models = Model::groupBy('city')->get();
任何人都可以帮忙找到方法吗?
想通过循环来做这件事,但想知道这样做的有效方法。
答案 0 :(得分:2)
$models = Model::groupBy('city')->selectRaw('city, array_agg(google) as google')->get();
试一试。这会将mysrt的结果分组。
APK
根据here,Postgres中有一个替代group_concat。
答案 1 :(得分: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
这是我做的:
对于postgreSQL,请使用此语法
SELECT city,
string_agg(google, ',')
FROM test
GROUP BY city