如何按laravel中的一列进行分组?

如何按laravel中的一列进行分组?,laravel,Laravel,我有一张分区表和一张班级表 类表就是这样设计的 (id、类别名称、章节id) 一个班级有许多类似的部分 -------------------------------------------- | SN | ClassName | Section_id | -------------------------------------------- | 1 | ClassOne | 1 | | 2 | Cl

我有一张分区表和一张班级表

类表就是这样设计的 (id、类别名称、章节id)

一个班级有许多类似的部分

--------------------------------------------
|    SN   |   ClassName   |   Section_id   | 
--------------------------------------------
|       1 |    ClassOne   |              1 |
|       2 |    ClassOne   |              2 |
|       3 |    ClassOne   |              3 |
|       4 |    ClassOne   |              4 |
--------------------------------------------
现在我只想按类名分组并显示该类的所有部分

 $data['classes'] = SectionClass::groupBy('class_name')->paginate(10);

我有这样的groupby,但它只给我一个节id,你只得到一行,因为这就是groupby所做的,将一组行分组为一组摘要行,并为每个组返回一行。在标准SQL中,包含GROUP BY子句的查询不能引用select列表中未在GROUP BY子句中命名的未聚合列。例如,在SQL Server中,如果您尝试下一个子句

SELECT * FROM [Class] GROUP BY [ClassName]
您将得到下一个错误

“列'SN'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中”

考虑一下,您是按类名分组的,并且按照示例数据,这将只返回一行。SELECT子句包含列ClassName,这很容易获取,因为每一行中的列ClassName都是相同的,但是当您选择另一行时,如果只需要选择一行,那么应该返回哪一行

现在,MySQL中的情况发生了一些变化。MySQL扩展了GROUPBY的标准SQL用法,因此select列表可以引用GROUPBY子句中未命名的未聚合列。这意味着前面的查询在MySQL中是合法的。但是,这主要是在GROUP BY中未命名的每个未聚合列中的所有值对于每个组都相同时才有用。服务器可以从每个组中自由选择任何值,因此,除非它们相同,否则选择的值是不确定的。你可以在这里找到关于这个主题的完整解释

如果希望在一行中得到结果,可以使用GROUP_CONCAT()函数

--------------------------------
|   ClassName   |   Sections   | 
--------------------------------
|   ClassOne    |    1,2,3,4   |
--------------------------------
您的查询必须类似于:

select `ClassName`, group_concat(Section_id) from `class` group by `ClassName`
您可以使用laravel中的原始查询获得此结果,也可以使用查询生成器找到获得相同结果的方法;)

这样试试

$things = SectionClass::paginate(10); 

$data['classes']= $things->groupBy('class_name');