Exemple #1
0
 /**
  * @param $entity
  * @param $targetId
  */
 public static function updateRating($entity, $targetId)
 {
     $positive = static::find()->where(['entity' => $entity, 'target_id' => $targetId, 'value' => self::VOTE_POSITIVE])->count();
     $negative = static::find()->where(['entity' => $entity, 'target_id' => $targetId, 'value' => self::VOTE_NEGATIVE])->count();
     if ($positive + $negative !== 0) {
         $rating = (($positive + 1.9208) / ($positive + $negative) - 1.96 * SQRT($positive * $negative / ($positive + $negative) + 0.9604) / ($positive + $negative)) / (1 + 3.8416 / ($positive + $negative));
     } else {
         $rating = 0;
     }
     $rating = round($rating * 10, 2);
     $aggregateModel = VoteAggregate::findOne(['entity' => $entity, 'target_id' => $targetId]);
     if ($aggregateModel == null) {
         $aggregateModel = new VoteAggregate();
         $aggregateModel->entity = $entity;
         $aggregateModel->target_id = $targetId;
     }
     $aggregateModel->positive = $positive;
     $aggregateModel->negative = $negative;
     $aggregateModel->rating = $rating;
     $aggregateModel->save();
 }