Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel函数属于模型或控制器_Php_Laravel_View_Model - Fatal编程技术网

Php Laravel函数属于模型或控制器

Php Laravel函数属于模型或控制器,php,laravel,view,model,Php,Laravel,View,Model,我有一个函数,其中包含一个查询和查询结果/集合的百分位数计算(见下文) 以下方式需要此功能: 我有一个运动员模型,有很多测试。每个测试也有很多结果。对于每个结果(显示在表格中),我需要显示一个计算出的百分比(未存储)。在这一点上(表视图),我需要函数来计算每个结果的百分比 我已经详细说明了模型。该帖子的答案还显示了所使用的查询 如果我将该函数粘贴到结果模型中,它允许我以这种方式从视图轻松访问它。{{$Result->getThisRank($test->age,$an\u athletor->g

我有一个函数,其中包含一个查询和查询结果/集合的百分位数计算(见下文)

以下方式需要此功能:

我有一个运动员模型,有很多测试。每个测试也有很多结果。对于每个结果(显示在表格中),我需要显示一个计算出的百分比(未存储)。在这一点上(表视图),我需要函数来计算每个结果的百分比

我已经详细说明了模型。该帖子的答案还显示了所使用的查询

如果我将该函数粘贴到结果模型中,它允许我以这种方式从视图轻松访问它。
{{$Result->getThisRank($test->age,$an\u athletor->gender,$Result->battery\u id,$Result->score)}

如果我把它放在一个控制器中,我需要一些动态而复杂的方法来为表中的每个特定结果调用路由。甚至不知道该怎么做

问题:在结果模型中进行此查询和计算是否正确

之前的一篇文章,似乎也与模型相吻合

对查询集合执行的计算:

                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');
        }
($i=1;$i<100;$i++)的
{
$rank=0.0;
$p=0.0;
$rank=$i/100*($count+1);
$p=$rank;
//获取用于插值的整数和小数http://onlinestatbook.com/lms/introduction/percentiles.html                
$intpart=地板($p);
$fraction=$p-$intpart;
//dd($intpart.'.$分数);
如果($fraction>0){//百分比公式的一部分-见文章
//测试最小数组索引是否不超出范围。测试为负数,大多数情况下使用。
如果($intpart!=0){
$scoreLow=$all_分数[$intpart-1];
如果($intpart==$count){//测试最大数组索引是否不超过界限
$scoreHigh=$all_分数[$intpart-1];
}否则{
$scoreHigh=$all_分数[$intpart];
}                            
}否则{
$scoreLow=$all_分数[0];
$scoreHigh=$all_分数[$intpart];
}                
//scoreLow和scoreHigh已经确定,现在是十进制排名的最后一步
$scoreHigh=$scoreHigh*1.0;
$scoreLow=$scoreLow*1.0;
$rank=($fraction*($scoreHigh-$scoreLow))+$scoreLow;
}否则{
$rank=($all_分数[$intpart-1]*1.0);//无十进制排名,普通排名计算
}
如果($sortorder=='asc'){
$排名[$i.'th%]=$rank;
}否则{
$RANKES[100-$i.‘th%']=$rank;
}
//$rankings->add(['rank'.$i=>$rank]);
}                 
//dd(排名);
//反向排名
$rev_rankings=数组_reverse($rankings);
如果($battery==111){
dd(修订版排名);
}
$view_rank=null;
foreach($key=>$rank的rev_排名){
如果($ATYLETOR_得分==$rank){
$view_rank=$key;
打破
}
如果($运动员得分>$排名){
$view_rank=$key;
打破
}
}
返回($view\u-rank);
}
否则{
返回(“不可用”);
}

您描述的计算类型肯定属于该领域(即-模型)。根据您构建应用程序的方式,您可以将函数放置在现有的雄辩模型中,甚至作为不扩展ORM的新实体的一部分。此外,我将标准化它提供的返回值的类型,可能将其限制为数值或可能的数值以及NULL。然后,我会在视图(刀片模板)中将任何空值等替换为“不可用”,正如我在函数底部注意到的那样。

这是一个返回的字符串,例如“30%”,因此“不可用”应该可以。但这种类型是有道理的。谢谢