2017-03-18 4 views
0

私は、クエリの結果/コレクションにクエリと百分率計算(以下)を含む関数を持っています。Laravel関数がモデルまたはコントローラに属しています

この機能は、次のように必要とされている:

私は多くのテストで、アスリートモデルを持っています。各テストにも多くの結果があります。すべての結果(テーブルに表示されます)については、計算されたパーセンタイル(格納されていない)を表示する必要があります。すべての結果のパーセンタイルを計算する関数が必要なのは、この時点(テーブルビュー)です。

私はモデルhereを詳述しました。その投稿の答えには、使用されたクエリも表示されます。

私は結果のモデルでその機能を固執した場合、それは私がコントローラーに入れた場合、私は呼び出すために、いくつかの動的で複雑な方法が必要になり{{$result->getThisRank($test->age, $an_athlete->gender, $result->battery_id, $result->score)}}

このようにビューからそれに簡単にアクセスできますテーブル内の各特定Resultのルート。これをどうやって行うかわからない。

質問:このクエリと計算を結果モデルに含めるのは間違いありませんか?

前の投稿hereの投稿もモデルと同じようです。クエリ収集に行っ

計算:

   for ($i = 1; $i < 100; $i++){ 
       $rank = 0.0; 
       $p = 0.0; 
       $rank = $i/100 * ($count + 1); 
       $p = $rank; 
       //get integer and decimal for interpolation http://onlinestatbook.com/lms/introduction/percentiles.html     
       $intpart = floor($p);  
       $fraction = $p - $intpart; 
       //dd($intpart . ' '.$fraction); 
       if($fraction > 0){ //part of percentile formula - see article 
        //test for min array index to not be out of bound. Test negative, most used case. 
        if($intpart != 0){ 
         $scoreLow = $all_scores[$intpart - 1]; 
         if($intpart == $count){ //test for max array index to not go over bound 
          $scoreHigh = $all_scores[$intpart - 1]; 
         } else{ 
          $scoreHigh = $all_scores[$intpart];  
         }        
        } else{ 
         $scoreLow = $all_scores[0]; 
         $scoreHigh = $all_scores[$intpart]; 
        }     
        //scoreLow and scoreHigh has been determined, now final step for decimal rank   
        $scoreHigh = $scoreHigh * 1.0; 
        $scoreLow = $scoreLow * 1.0; 
        $rank = ($fraction * ($scoreHigh - $scoreLow)) + $scoreLow; 
       } else{ 
        $rank = ($all_scores[$intpart - 1] * 1.0);//no decimal rank, plain rank calculation 
       } 

       if($sortorder == 'asc'){ 
        $rankings[$i.'th %'] = $rank;        
       }else{ 
        $rankings[100 - $i.'th %'] = $rank; 
       } 

        //$rankings->add(['rank'.$i => $rank]); 
      }     
      //dd($rankings); 
      //reverse rankings 
      $rev_rankings = array_reverse($rankings); 
      if ($battery == 111){ 
       dd($rev_rankings); 
      } 

      $view_rank = null; 
      foreach($rev_rankings as $key => $rank){ 
       if($athlete_score == $rank){ 
        $view_rank = $key; 
        break; 
       } 
       if($athlete_score > $rank){ 
        $view_rank = $key; 
        break; 
       } 
      } 
      return($view_rank); 
     } 
     else{ 
      return ('Not available'); 
     } 

答えて

1

あなたがドメインに属している、確かに記述した計算のタイプ(すなわち、 - モデル)。アプリケーションをどのように構成しているかによって、既存のEloquentモデル内に、またはORMを拡張しない新しいエンティティの一部として機能を配置することができます。さらに、私はそれが提供する戻り値の型を標準化するでしょう、恐らくそれは数値だけでなく数値でもNULLに制限されています。次に、ビュー(ブレードテンプレート)の中で、機能の一番下にある「使用不可」のNULL値などを置き換えます。

+0

返される文字列です。 '30%'なので、 '利用できません'は大丈夫です。しかし、タイプは意味をなさない。ありがとう! – louisav

関連する問題