代码之家  ›  专栏  ›  技术社区  ›  Dev.W

Laravel雄辩的GroupBy名称创建ID数组

  •  0
  • Dev.W  · 技术社区  · 6 年前

    我的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”包含在组中,从而破坏目标。我知道这是在要求这个,因为它不是一个总数或计数等。

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

    1 回复  |  直到 6 年前
        1
  •  3
  •   Mozammil    6 年前

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

    这应该能解决问题。