我的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表建立联系,但是在现阶段这是必要的。
答案 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);
});
应该可以解决问题。