Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Сделал рейтинг по 5 шкале, всё работает, допустимый ли вариант?
Когда пользователь голосует, то данные записываются в отдельную таблицу,
потом идёт подсчёт голосов и результат присваивается в поле rating в таблицу user.
user_rating
id user_id master_id valuation
1 2 2 3
3 3 2 1
14 1 2 4
public function addRating(Request $request)
{
$userAuth = Auth::user()->id;
//сначала узнаём, голосовал ли уже пользователь
//этот пост
$users = DB::table('user_rating')
->where('master_id', '=', $request->userId)
->where('user_id', '=', $userAuth)
->get();
//если голосовал, то обновляем его новый голос
if($users->count() == 1) {
$this->updateRating($users[0]->id, $request);
}
// иначе первый раз голосуем
else {
$id = DB::table('user_rating')->insertGetId(
[
'user_id' => $userAuth,
'master_id' => $request->userId,
'valuation' => $request->rating
]);
$this->updateRating($id, $request);
}
}
public function updateRating($id, $data)
{
//обновление рейтинга, для пользователя
DB::table('user_rating')
->where('id', $id)
->update(['valuation' => $data->rating]);
//найти все голоса, данного поста
$collection = DB::table('user_rating')
->where('master_id', '=', $data->userId)
->get();
//количество всего голосов
$count= $collection->count();
//извлекаем значения с голосами
$plucked = $collection->pluck('valuation');
// подсчёт среднего числа
$avg = round($plucked->sum()/$count, 1);
User::where('id', $data->userId) ->update(['rating' => $avg]);
}
Не в сети
Страницы 1