Laravel по-русски

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

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

#1 07.10.2018 23:24:30

Рейтинг

Сделал рейтинг по 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]);
        
    }

Не в сети

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