Laravel с использованием функции подсчета в модели

#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();