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');
我有一个具有 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');