evgeniy2194
@evgeniy2194
PHP, js developer

Почему не верно работает COUNT?

Доброго времени суток.

$posts = self::selectRaw('users.login, posts.*, comments.id, COUNT(comments.id) as comments_count,GROUP_CONCAT(DISTINCT(categories.name)) as cat_name')
                     ->Join('users','users.id', '=', 'posts.author')
                     ->leftJoin('post_cat','post_cat.post_id', '=', 'posts.id')
                     ->leftJoin('categories','categories.id', '=', 'post_cat.cat_id')
                     ->leftJoin('comments','comments.post_id','=','posts.id')
                     ->orderBy('posts.created_at', 'DESC')
                     ->groupBy('posts.id')
                     ->paginate(10);


COUNT(comments.id) считает х2 почему-то, не могу понять почему. Если в для поста 10 комментариев то результат выводит 20
  • Вопрос задан
  • 203 просмотра
Решения вопроса 2
AmdY
@AmdY
PHP и прочие вебштучки
У меня другой вопрос, какого чёрта вы лепите такое гавно.

self::selectRaw, есть стово static, которое не ломает наследование, а главное и его не нужно использовать, ибо в Laravel статик гоняется через фасады и вы работает с полноценными объектами, нужно использовать $this.

В Eloquent есть нормальный ORM, который для этого запроса шустреньоко всё насчитает и прозрачно подтянет связи, а ваш код будет сложно поддерживаемым. Уважайте своих коллег, а то сами заблудились в 3-х соснах.

Поставьте себе отладчик или просто выведите получившийся запрос laravel.com/docs/5.0/database#query-logging чтобы понять, что в итоге получилось и что оно возвращает.
Ответ написан
@targrik
Так может произойти, если элементу таблицы posts соответствует два элемента таблицы post_cat. Попробуйте использовать COUNT(DISTINCT comments.id).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы