2

我正在尝试获得一家餐厅的总星级平均评分。顾客会给这家餐厅打分。我制作了一个用于存储客户评分的数据透视表。

The average rating =5

--------
place_ratings
---------------
user_id   place_id rating
   1          1      4
   2          1      3
   5          1      5

公式是什么或如何在 php laravel 中计算?
这是我的代码:

public function placeRating($id)
    {

        $rates = PlaceRating::where('place_id',$id)->select('rating')->get()->toArray();

           $rateArray =[];
           foreach ($rates as $rate)
           {
               $rateArray[]= $rate['rating'];
           }

            $sum = array_sum($rateArray);
            $result = $sum/5;

            return response()->json(['rating'=>$result],200);
    }
4

2 回答 2

5

不要把所有place_ratings记录都拿出来,如果有成千上万的用户评价餐厅,它会减慢你的 API。

尝试使用此查询:

PlaceRating::where('place_id',$id)->selectRaw('SUM(rating)/COUNT(user_id) AS avg_rating')->first()->avg_rating;
于 2019-12-29T06:12:50.823 回答
1

这就是我想出的。我把它作为一个集合来使用集合方法:

public function placeRating($id)
{
    $ratings = PlaceRating::where('place_id',$id)->get();
    $ratingValues = [];

    foreach ($ratings as $aRating) {
        $ratingValues[] = $aRating->rating;
    }

    $ratingAverage = collect($ratingValues)->sum() / $ratings->count();

    return $ratingAverage;
}
于 2019-12-29T06:18:48.953 回答