#php #laravel
#php #laravel
Вопрос:
У меня есть сообщение модели:
protected $guarded = [];
public function reviews() {
return $this->hasMany(Review::class);
}
Моя таблица отзывов имеет тип столбца со значениями: 1 (хорошо), 2 (комментарий), 3 (отрицательный).
Мне нужно получить количество отзывов для каждого типа. Мне нужно глобально получить эти подсчеты. Я знаю, что могу сделать в модели что-то вроде этого:
protected $withCount = ['reviews'];
Но это дает мне все отзывы. Но мне нужно получить количество только для каждого типа.
Ответ №1:
Вы могли бы использовать withCount
метод и выполнять подзапросы внутри:
$counts = Post::withCount([
'reviews',
'reviews as good_reviews' => function ($query) {
$query->where('type', 1);
}],
'reviews as bad_reviews' => function ($query) {
$query->where('type', 3);
}],
}])->get();
Вы можете получить доступ к подсчету следующим образом:
echo $counts[0]->good_reviews;
Для получения дополнительной информации: Документы
Ответ №2:
для этого вы можете использовать метод GroupBy.
Что-то вроде этого:
DB::table('reviews')
->select('type', DB::raw('count(*) as total'))
->groupBy('type')
->get();