php - 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 等。
上表可能看起来不寻常,我知道我应该与公司表有关系,但是在这个阶段这是必要的。
解决方案
你可以使用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);
});
这应该够了吧。
推荐阅读
- cookies - Youtube 无 Cookie 跟踪
- memory-management - 如何理解 valgrind 的消息“无效写入”和“地址在块内”?
- python-3.x - How to do random search for hyperparameters on different GPUs in parallel?
- windows - 不同会话的 FindWindow
- python - 如何找到一个相对于其他数组遵循某些规则的数组?
- php - 问题获取函数结果以回显
- tensorflow - 我应该更改我的 Keras 代码以在 GPU 上运行它吗?
- python - 如何通过文本挖掘实现文本的(统计)主题比较?
- django - 504 网关超时 nginx/1.10.3 (Ubuntu)
- windows - 为什么鼠标按钮 2 和 3 对菜单的行为不同?