Laravel 5.3 模型 - 计算一列 - 哪种方法更快



我有一个级别列,需要计算每个列有多少个。

这些选项中哪一个更快/更有效,为什么?或者也许是我没有考虑过的更快方法?

$athletes = Athlete::orderBy('level', 'desc')->get();
   foreach ($athletes as $a) {
        switch ($a->level) {
            case "advanced":
                $dataAdvanced += 1; 
                break;
            case "intermediate":
                $dataIntermediate += 1;
                break;
            case "medium":
                $dataMedium += 1;
                break;
            case "beginner":
                $dataBeginner += 1;
                break;
            case "other":
                $dataOther += 1;
                break;
        }

    $dataAdvanced = Athlete::where('level', 'advanced')->count();
    $dataIntermediate = Athlete::where('level', 'intermediate')->count();
    $dataMedium = Athlete::where('level', 'medium')->count();
    $dataBeginner = Athlete::where('level', 'beginner')->count(); 
    $dataOther = Athlete::where('level', 'other')->count();
If your table name is athletes, note: use DB in controller
$athletesInfo = DB::table('athletes')
                     ->select('level', DB::raw('count(*) as total'))
                     ->groupBy('level')
                     ->get();

我认为这是计算计数(级别(和按级别分组的正确方法

 Athlete::select('id', DB::raw("count(level) as total_count"))->groupBy('level')->get();

最好的方法是使用group bycount,如下所示:

$count = Athlete::groupBy('level')->select(DB::raw('count(level) as total'))->get();

相关内容

最新更新