2017-06-06 56 views
0

雄辯計數如果我有以下表結構laravel與GROUPBY

ID  name type  
1  John Admin 
2  Johan Admin 
3  Sam User 
4  Rick User 

我將如何使用Laravels洋洋灑灑有GROUPBY查詢,但仍抓住每一個記錄,也總結了每種類型有多少記錄每種類型有?

例的結果將是如下

[ 
    'type' => 'Admin', 
    'records' => 2 
    'data' => [ 
     0 => [ 
      'name' => 'John' 
     ], 
     1 => [ 
      'name' => 'Johan' 
     ] 
    ] 
], 
[ 
    'type' => 'User', 
    'records' => 2 
    'data' => [ 
     0 => [ 
      'name' => 'Sam' 
     ], 
     1 => [ 
      'name' => 'Rick' 
     ] 
    ] 
] 
+0

你的查詢碼在哪裏? – Aboudeh87

+0

你試過了什麼? –

回答

2

既然你查詢你應該查詢,而不是分組後做分組查詢喜歡的網友:

$users = User::all()->groupBy('type'); 

然後,你可以這樣做:

foreach ($allUsers as $type => $users) { 
    $type; // 'Admin' 
    $users->count(); // Record Count 
    foreach ($users as $user) { 
     $user->name; // 
    } 
} 

如果你想數據完全像你的例子那麼它將是:

User::all() 
    ->groupBy('type') 
    ->map(function($users, $type) { 
     return [ 
      'type' => $type, 
      'records' => $users->count(), 
      'data' => $users->pluck('name') 
     ]; 
    }) 
    ->values(); 
+0

這正是我想要的。這也使我可以使用這個查詢時,類型是動態的,仍然在一起正確地分組在一起,非常感謝你 – killstreet

1

我認爲實現這一目標的最好的辦法是有一個表通過hasMany()與您的數據類型。

然後你可以使用標準的雄辯工具,而無需手動重組數據:

$data = Type::with('users')->withCount('users')->get(); 
0

此外,您還可以使用DB::select('select * from xxx group by yyy')執行查詢。

+0

如果你有一個體面大小的數據庫,這將是太重的SQL語句寫下來。 – killstreet