2017-05-19 3 views
1

나는 레벨 열을 가지고 있으며 각 열의 수를 계산해야합니다.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(); 
+0

레벨에 의한 카운트 (*) Gorup – JYoThI

+0

제네릭 메서드가 사용자 지정 메서드보다 빠르고 최적화되므로 –

+0

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

답변

4
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(); 
2

가장 좋은 방법은 같은 group bycount을 사용하는 것입니다

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

나는이 카운트 (레벨) 등을 계산하는 올바른 방법이라고 생각 수준별 그룹

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