2016-09-23 242 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');