首页 > 解决方案 > Laravel Eloquent GroupBy Name 创建 ID 数组

问题描述

我的 Laravel 应用程序中有一个表,我想查询它。

id | company_name | contact |
-----------------------------
1  | Tesco        | Name 1  |
2  | Tesco        | Name 2  |
3  | Asda         | Name 3  |
4  | Tesco        | Name 4  |
5  | Asda         | Name 5  |

我正在尝试获取具有所有 ID 号的所有唯一公司名称的数组。

'Tesco' => [1,2,4]
'Asda' => [3,5]

我努力了

$companies = Contact::select('company_name','id')->groupBy('company_name')->get();

但是,这要求将“id”包含在破坏目的的组中。我知道它要求这个,因为它不是 SUM 或 COUNT 等。

上表可能看起来不寻常,我知道我应该与公司表有关系,但是在这个阶段这是必要的。

标签: phplaraveleloquent

解决方案


你可以使用GROUP_CONCAT()

$companies = Contact::select('company_name', DB::raw('GROUP_CONCAT(id) as ids'))
    ->groupBy('company_name')
    ->get();

这将返回如下内容:

company_name | ids
Tesco        | 1,2

编辑:如果你想要数组形式的 id,你可以映射集合来转换它:

$companies->map(function($column) {
    $column->ids = explode(',', $column->ids);
});

这应该够了吧。


推荐阅读