NikolayAlb
@NikolayAlb

Посчитать кол-во записей с определенным значением (лайк/дизлайк)?

У меня есть таблица постов. Есть таблица рейтинга постов такого вида:
|id, post_id, user_id, like|

При нулевом значении like - получается дизлайк, при положительном - лайк. Функционал убирания лайка/дизлайка - удаление записи в таблице.

Теперь мне нужно посчитать кол-во лайков и кол-во дизлайков, а также определить оценил ли пользователь запись.
Как это лучше будет сделать? К примеру со связями в лоб сделал в модели поста так:
public function likes()
    {
        return $this->hasMany('App\Rating')->where('like', '1')->count();
    }

    public function dislikes()
    {
        return $this->hasMany('App\Rating')->where('like', '0')->count();
    }

Душа чует быдлокод и потенциальную нагрузку при пересчете значений на каждый пост.

Думал насчет того, чтобы помимо таблицы с рейтингом добавить к таблице постов пару значений like/dislike. И менять их при каждом лайке/дизлайке. Это устранит потребность в постоянном пересчете, но выглядит как костыль.
  • Вопрос задан
  • 364 просмотра
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Это не костыль, это вполне нормальная практика. Обычно на таблицу лайков вешают триггер, который меняет значение в основной таблице.
Ответ написан
Комментировать
vanyahuk
@vanyahuk
лучше будет сделать таблицу с id пользователей и id постов + еще 1 столбец like, где будет писаться 1 если пользователь поставил лайк и 0 если дизлайк, а потом подщитать все самим mysql
Ответ написан
Комментировать
public function likes()
{
    return $this->hasMany('App\Rating')->where('like', '1');
}

public function dislikes()
{
    return $this->hasMany('App\Rating')->where('like', '0');
}

$post->withCount('likes');
$post->withCount('dislikes');


https://laravel.com/docs/5.4/eloquent-relationship...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы