Laravel 查询 - 加入和分组

Posted

技术标签:

【中文标题】Laravel 查询 - 加入和分组【英文标题】:Laravel query - Join and GroupBy 【发布时间】:2016-07-12 22:07:19 【问题描述】:

我正在使用 laravel,我正在尝试从表中选择一些东西..

$cars= DB::table('cars')
        ->leftJoin('types', 'cars.type_id', '=', 'types.id')
        ->groupBy('types.id')->get();

基本上,我希望将“汽车”分组在相同“类型”的子数组中。但它最终会将所有组条目合并到每辆车中。

如何进行此查询?

【问题讨论】:

leftJoin 在这个意义上是正确的吗?我想说你需要使用rightJoin 来获取所有类型,并且只有那些对应于typeid 的汽车。 我也想退回'null'类型的汽车 子数组到底是什么意思? 我想要一个包含不同类型子对象的对象。我可以这样做: $cars= \App\Cars::where('active', 1)->get()->groupBy('type_id') .. 但它不加入表格,我不能获取类型属性,例如 type.title @raphadko 如果你使用 Eloquent:Relationships 那么 $cars= \App\Cars::where('active', 1)->get()->groupBy('type_id') 将起作用并且你甚至可以获得类型属性。只需要在模型中定义关系 【参考方案1】:

如果碰巧那个类型是你想要的并且被合并到 $car 的返回集中, 你甚至可以像这样删除 groupBy

  $cars= DB::table('cars')
          ->leftJoin('types', 'cars.type_id', '=', 'types.id')
          ->get();

然后像这样使用 groupBy() 对结果集进行分组

   $cars->groupBy('type');

记住这是可能的,因为结果集是某种集合。 因此最终的代码将如下所示

   $cars= DB::table('cars')
      ->leftJoin('types', 'cars.type_id', '=', 'types.id')
      ->get();

    return $cars->groupBy('type');

【讨论】:

以上是关于Laravel 查询 - 加入和分组的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 查询将分组小时的所有 X 和 Y 列相加

Laravel 中数据库查询构建器的位置

Laravel Eloquent 查询,带有连接、计数和分组依据

如何简化 Laravel 查询以按年搜索日期并按月分组

Laravel 按日期分组,如 MySQL 查询 GROUP BY MONTH(fields) [关闭]

使用 Laravel 查询数据并按天分组