Laravel 用 groupby 进行雄辩计数

kil*_*eet 2 php laravel eloquent

如果我有以下表结构

ID      name   type    
1       John   Admin   
2       Johan  Admin
3       Sam    User
4       Rick   User
Run Code Online (Sandbox Code Playgroud)

我如何将 Laravels Eloquent 与 groupBy 查询一起使用,但仍然获取每条记录,并总结每种类型有多少条记录?

示例结果如下

[
    'type' => 'Admin',
    'records' => 2
    'data' => [
        0 => [
            'name' => 'John'
        ],
        1 => [
            'name' => 'Johan'
        ]
    ]
], 
[
    'type' => 'User',
    'records' => 2
    'data' => [
        0 => [
            'name' => 'Sam'
        ],
        1 => [
            'name' => 'Rick'
        ]
    ]
]
Run Code Online (Sandbox Code Playgroud)

Eri*_*ker 7

由于您正在查询所有用户,因此您应该在查询后进行分组,而不是在查询中进行分组,如下所示:

$users = User::all()->groupBy('type');
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

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

如果您想要的数据与您的示例完全相同,那么它将是:

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