public function updateAllWeightedAverage() { $all = WeightedAverage::where("ratingable_type", "Iterinary")->get(); foreach ($all as $wa) { //check if number of votes reaches 5 (minimum) if ($this->checkMinVotes($wa->ratingable_id)) { // dd("in"); $numOfVotes = count(Rating::where("ratingable_type", "Iterinary")->where("ratingable_id", $wa->ratingable_id)->get()); $avgRate = Rating::where("ratingable_type", "Iterinary")->where("ratingable_id", $wa->ratingable_id)->selectRaw("avg(value)")->get(); $avgAll = Rating::where("ratingable_type", "Iterinary")->selectRaw("avg(value)")->get(); foreach ($avgRate as $value) { $avgRate = $value['avg(value)']; } foreach ($avgAll as $value) { $avgAll = $value['avg(value)']; } //calculate weighted average (base Bayesian rating W = Rv+Cm/v+m ) $weighted_average = round(($avgRate * $numOfVotes + $avgAll * 5) / ($numOfVotes + 5), 1); // dd($avgRate,$numOfVotes, $avgAll, $weighted_average); // dd($wa->id); $update_weighted_average = WeightedAverage::find($wa->id); $update_weighted_average->average = $weighted_average; $update_weighted_average->save(); // return "updated successfully"; } else { // dd("cannot get WeightedAverage"); } } }