Laravel Eloquent GroupBy Name 创建 ID 数组

Dev*_*Wol 0 php laravel eloquent

我的 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  |
Run Code Online (Sandbox Code Playgroud)

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

'Tesco' => [1,2,4]
'Asda' => [3,5]
Run Code Online (Sandbox Code Playgroud)

我试过了

$companies = Contact::select('company_name','id')->groupBy('company_name')->get();
Run Code Online (Sandbox Code Playgroud)

然而,这要求将“id”包含在违背目的的组中。我知道它要求这样做是因为它不是 SUM 或 COUNT 等。

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

Moz*_*mil 5

你可以用 GROUP_CONCAT()

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

这将返回如下内容:

company_name | ids
Tesco        | 1,2
Run Code Online (Sandbox Code Playgroud)

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

$companies->map(function($column) {
    $column->ids = explode(',', $column->ids);
});
Run Code Online (Sandbox Code Playgroud)

这应该够了吧。