2016-09-23 235 views
0

我使用laravel 5.2,我想根据两列(配置和类型)的值对表进行分组。所以基本上如果表中的两行或多行具有相同的配置和类型,它们将被分组。 我试着查询像这样和它不工作:laravel按多列分组

$groups = Model::where('active', 1)->get()->groupBy('type_id', 'configuration_id'); 

有什么建议?

编辑:我想我正在使用错误的查询。我想要做的是获得这两列中具有相同值的行,并将它们分组。显然,group by用于聚合事物,例如,如果我想要一笔或一些东西。

编辑2:其实我在这里使用的groupby不是查询的一部分,它是由laravel提供的帮助函数,用于集合看到这个link有谁知道它是否由两个feilds组?

回答

0

好,我想通了。 我正在使用的groupBy方法不是一个查询,它是一个laravel函数,它按照特定的分组对集合进行分组。你可以看到文档here。所以解决方法是像这样做两次分组。

$groups = Model::where('active', 1)->get()->groupBy('type_id'); 

    foreach ($groups as $group) { 
     $grouped[] = $group->groupBy('configuration_id'); 
    } 

如果有人有这样做的更有效的方式,我希望看到他们的方式。

0
$groups = Model::where('active', 1)->groupBy('type_id', 'configuration_id')->get(); 
+0

这一个工作,但它得到每个组的第一个。任何想法为什么? – user3552551

+0

不知道。可能我们会参考文件,所以我们会对此有所了解。 –

0
$groups = Model::where('active', 1)->groupBy('type_id', 'configuration_id')->get(['type_id', 'configuration_id']); 
+0

请随时在您的代码中添加一些解释... – andreas

+0

好吧...它会对列进行分组,您可以通过获取函数获得一些特定字段... –

0

尝试这样

$groups = Model::where('active', 1)->groupBy('type_id', 'configuration_id');