2015-05-26 8 views
1

Я работаю над проектом для golfstatistics. Прямо сейчас я сделал это до сих пор, чтобы войти и редактировать golfstatistics. Я работаю с laravel 5 btw.Статистические вычисления в laravel

Моя схема базы данных работает следующим образом:

  • Каждый раунд вы играть сохраняет один элемент в круглом столе с информацией, как (дата, playid, погода, courseid)
  • для каждого отверстия играл запись в таблица сметы сделана. Там у меня есть ссылка на roundid и информацию, как (оценка, fairwayhit, greenhit, Путс, штрафы, ....)

Нет, я хочу, чтобы создавать отчеты, где можно фильтровать по дате и конечно т.д. То, что я сделал сейчас, это. Я создал класс Statistic, в котором я могу передать дату, playerid, roundid, courseid в конструкции. Конструкция запросит все раунды, соответствующие этим фильтрам.

Затем, для статистики, я сделал публичную функцию ex. scoring_average, greenhit_percantage, putts_per_round, putts_per_greeninregulation и т. д., около 15 характеристик.

Итак, мой вопрос: правильно ли, что я здесь делаю? потому что у меня есть около 15 функций для расчета статистики.

Просьба дать мне несколько советов, если у вас есть лучшее решение.

Спасибо

ответ

0

класс статистики {

/** 
* The table associated with the model. 
* 
* @var string 
*/ 
public $rounds = []; 

public function __construct($user_id, $roundid = null, $start = "2000-01-01", $end = "2030-01-01", $courseid = 0){ 
    $this->rounds = Round::where('user_id', '=', $user_id)->get(); 
} 

public function score(){ 
    if(count($this->rounds) > 0){ 
     $avg = 0; 
     foreach($this->rounds as $round){ 
      $scores = Score::where('round_id', '=', $round->id)->get(['score']); 
      foreach($scores as $score){ 
       $avg += $score->score; 
      } 
     } 

     return $avg/count($this->rounds); 
    } else { 
     return "N/A"; 
    } 

} 

public function fir(){ 
    if(count($this->rounds) > 0){ 
     $fairway = []; 
     foreach($this->rounds as $round){ 
      $scores = Score::where('round_id', '=', $round->id)->get(['fir']); 
      foreach($scores as $score){ 
       if($score->fir != 0){ 
        array_push($fairway, $score->fir); 
       } 

      } 
     } 

     $hits = array_count_values($fairway); 

     //unset($hits[0]); //unsets par 3 with value 0 

     return self::percArray($hits); 

     return $perc; 
    } else { 
     return "N/A"; 
    } 

} 
Смежные вопросы