Laravel Eloquent GroupBy通过名称创建ID数组

时间:2019-01-21 14:14:47

标签: 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  |

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

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

我尝试过

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

但是,这要求将“ id”包含在破坏目标的组中。我了解它是要此操作的,因为它不是SUM或COUNT等。

上表似乎很不寻常,我知道我应该与company表建立联系,但是在现阶段这是必要的。

1 个答案:

答案 0 :(得分:3)

您可以使用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);
});

应该可以解决问题。