2017-06-06 124 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