laravel雄辩的计数与groupby

If I'd have the following table structure

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

How would I use Laravels Eloquent with a groupBy query, but still grab each record, and also sum up per type how many records each type has?

Example result would be as follow

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

Since you are querying all the users you should be doing the grouping after the query instead of grouping in query like:

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

Then you can do:

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

If you want the data EXACTLY like your example then it would be:

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

I think the best way to achieve this is to have a table with types related through hasMany() to your data.

Then you can use standard Eloquent tools without restructuring the data manually:

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

Also, you can use DB::select('select * from xxx group by yyy') to execute the query.