laravel eloquent query group by

时间:2016-08-10 07:32:25

标签: php laravel

我有以下结构,只是附上截图供参考,考虑附加的图像是我的sql架构

enter image description here

这就是我想要的

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

我使用过 Postgresql

虽然我的实施背后没有任何逻辑,但是我尝试了小组,没有任何魔法参与laravel

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

任何人都可以帮忙找到方法吗?

想通过循环来做这件事,但想知道这样做的有效方法。

2 个答案:

答案 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

这是我做的:

enter image description here

对于postgreSQL,请使用此语法

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