Laravel HasMany 关系计数

Laravel HasMany relationships count

我有一个具有 hasMany 关系的用户模型。

用户有很多未审阅的文件,我正在尝试获取未审阅文件的总数。 我就是这样做的。我只是想知道有没有更好的方法

    $users = User::families()->whereHas('unreviewedcovidfiles')->withCount('unreviewedcovidfiles')->get();
    $totalfiles = 0;
    foreach($users as $user){
        $totalfiles += $user->unreviewedcovidfiles_count;
    }
    return $totalfiles;

您可以使用 hasManyThrough relationship 实现此目的。定义关系后,您可以简单地使用 count() 对关系进行计数。

假设您在 unreviewedcovidfiles 模型上有 user 关系。

您可以直接从 unreviewedcovidfiles 的模型中获取计数,并通过 whereHas 方法按租户筛选用户:

$totalfiles  = Unreviewedcovidfile::whereHas('user', function($query){
    $query->families();
})->count();

https://laravel.com/docs/8.x/eloquent-relationships#querying-relationship-existence

或者,使用 sum 收集方法:

$users = User::families()->whereHas('unreviewedcovidfiles')->withCount('unreviewedcovidfiles')->get();
$totalfiles = $users->sum('unreviewedcovidfiles_count');

https://laravel.com/docs/8.x/collections#method-sum