Laravel с функцией использования количества в модели - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть модель Сообщение:

 protected $guarded = [];

 public function reviews() {
      return $this->hasMany(Review::class);
 }

Моя таблица отзывов имеет тип столбца со значениями: 1 (хорошо), 2 (комментарий), 3 (отрицательно). Мне нужно получить количество отзывов для каждого типа. Мне нужно глобально получить эти цифры. Я знаю, что я могу сделать в модели что-то вроде этого:

 protected $withCount = ['reviews'];

Но это принесло мне все отзывы. Но мне нужно рассчитывать только для каждого типа.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Вы можете использовать метод 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;

Для получения дополнительной информации: Документы

0 голосов
/ 17 апреля 2019

вы можете использовать метод GroupBy для него.

Примерно так:

DB::table('reviews')
             ->select('type', DB::raw('count(*) as total'))
             ->groupBy('type')
             ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...