Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 15.03.2015 22:31:07

Комментарии к статье.

Добрый день.

Как лучше сделать подсчет комментариев к статье.

1. Создать поле comments в таблице с статьями куда записывать +1 при добавлении нового материала и отнимать 1 при удалении.
2. Подсчитывать нужные комментарии в таблице комментариев, что мне кажется более глупо, при выводе 20 статей на странице, нужно 20 раз считать комментарии для этой статьи.

Первый вариант вроде лучше как по мне, но не очень удобен, как по мне.

Что посоветуете?

Не в сети

#2 16.03.2015 06:14:38

Re: Комментарии к статье.

Задавал точно такой же вопрос.
Сам пришел к 1 варианту, по мне - так вполне удобно.

Не в сети

#3 16.03.2015 09:12:57

Re: Комментарии к статье.

Со счётчиком есть проблема в том, что теряется целостность и получается дублирование данных. Его сложнее поддерживать (например, больше недостаточно сделать DELETE на комментарии, нужно также изменить счётчик). Насколько это проблемно — зависит от разных факторов (нагруженность, сложность архитектуры и пр.).

  1. нужно 20 раз считать комментарии для этой статьи.

Не обязательно.

sqlSELECT articles.*, COUNT(1) AS comment_count FROM articles
JOIN comments ON comments.article_id = articles.id
WHERE articles.foo = 'bar' AND ...

Скорость такой операции будет вполне хорошей, так как БД свяжет обе таблицы по индексам. Зато вы избавляетесь от лишнего счётчика.

Не в сети

#4 20.03.2015 23:31:57

Re: Комментарии к статье.

Proger_XP пишет:

}%Со счётчиком есть проблема в том, что теряется целостность и получается дублирование данных. Его сложнее поддерживать (например, больше недостаточно сделать DELETE на комментарии, нужно также изменить счётчик). Насколько это проблемно - зависит от разных факторов (нагруженность, сложность архитектуры и пр.).

> нужно 20 раз считать комментарии для этой статьи.
Не обязательно.
%%(sql)
SELECT articles.*, COUNT(1) AS comment_count FROM articles
JOIN comments ON comments.article_id = articles.id
WHERE articles.foo = 'bar' AND ...
%%

Скорость такой операции будет вполне хорошей, так как БД свяжет обе таблицы по индексам. Зато вы избавляетесь от лишнего счётчика.

   

$posts = Post::orderBy('created_at', 'DESC')
                ->select('posts.*', DB::raw('count(*) as comment_count'))
                ->join('comments', function($join){
                    $join->on('comments.post_id', '=', 'posts.id');
                })
                ->paginate(3);

Помогите пожалуйста написать, а то всю голову сломал и не в какую(

в таблице posts записи, в таблице comments - комментарии. Нужно посчитать комментарии где сomments.post_id  = posts.id. Как реализoвать в laravel.

Заранее спасибо.

Не в сети

Подвал раздела