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 Eloquent 查询,带有连接、计数和分组依据