【发布时间】:2017-05-19 11:35:19
【问题描述】:
我有一个 Level 列,需要计算每个列的数量。
哪些选项更快/更高效,为什么?或者也许是我没有考虑过的更快的方法?
$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();
【问题讨论】:
-
count(*) 按级别分组
-
第二个,因为泛型方法会比你自定义的方法更快和优化
-
Athlete::select('id', \DB::raw("count(level) as total_count"))->groupBy('level')->get();
-
哇,3个人发布完全相同的代码^^
-
你们几乎不可能选择一个他们这么漂亮的答案。 nithin-john 的一个提供了最简单/更易读的输出。谢谢大家 - 学到了很多。
标签: php laravel model eloquent