Ваш запрос полностью в порядке. Я считаю, что это наиболее эффективный подход.
В качестве альтернативы, вы можете использовать функцию withCount .
Я полагаю, вы уже получили свою модель категории:
class Category extends Model
{
public function assets()
{
return $this->hasMany(Asset::class);
}
}
$categories = Category::withCount([
'assets',
'assets as assigned_count' => function ($query) {
$query->where('status_id', 1);
},
'assets as stored_count' => function ($query) {
$query->where('status_id', 2);
},
'assets as missing_count' => function ($query) {
$query->where('status_id', 3);
},
'assets as broken_count' => function ($query) {
$query->where('status_id', 4);
},
])
->get();
Тогда:
$categories->each(function ($category) {
dump($category->assets_count);
dump($category->assigned_count);
dump($category->stored_count);
dump($category->missing_count);
dump($category->broken_count);
});