私は、クエリの結果/コレクションにクエリと百分率計算(以下)を含む関数を持っています。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');
}
返される文字列です。 '30%'なので、 '利用できません'は大丈夫です。しかし、タイプは意味をなさない。ありがとう! – louisav