nkdev55
@nkdev55
Front-end developer

Как вывести кол-во комментариев в laravel?

Здравствуйте! (Я новичок в этой сфере)
Задача: вывести последние 100 новостей на странице, подписывая сколько у каждой положительных и сколько отрицательных комментариев. А еще сортируя их по соотношению положительные/отрицательные, у кого больше соотношение, те выше.
Вопрос: как вывести хотя бы просто кол-во комментариев у каждой новости раздельно (положительные/отрицательные)?
Я думаю что к каждой новости делать отдельный запрос на подсчет комментариев, это немного глупо. Учитывая что их в среднем по 1000(да да). И при каждом заходе пользователя, это слишком ресурсоёмко.
public function up()
    {
        Schema::create('comments', function (Blueprint $table) {
            $table->increments('id'); // Идентификатор комментария
            $table->integer('status'); // Статус комментария (0 - отрицательный,
                                       // 1 - положительный, 2 - нейтральный, null - не указано)
            $table->text('text'); // Текст комментария
            $table->integer('news_id')->unsigned();
            $table->timestamps();
        });
    }

Это таблица с комментариями. С новостями все просто, там есть ID и собственно текст новости с заголовком.
  • Вопрос задан
  • 368 просмотров
Решения вопроса 1
Konata69lol
@Konata69lol
backend php laravel
$news = News::withCount(['comments as comments_positive' => function ($query) {
    $query->where('status', 1);
},'comments as comments_neutral' => function ($query) {
    $query->where('status', 0);
},])->get();

// счетчики для первой новости из выборки
$news[0]->comments_positive_count;
$news[0]->comments_neutral_count;


Получим все новости с счетчиком положительных и нейтральных комментариев.

P.s. нужен релейшен comments в модели News
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
18 июл. 2019, в 10:42
150000 руб./за проект
18 июл. 2019, в 10:14
300 руб./за проект
18 июл. 2019, в 09:39
5000 руб./за проект