You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何统计各课程对应的排课数量?

解决方案

方法一:集合分组(适合小型数据集)

在控制器中对排课数据做分组统计,避免在视图里处理重复逻辑:

// 预加载关联,避免N+1查询问题
$singledegreesection->load(['classschedule.ccourse.course']);

// 按课程名称分组,统计每组的排课数量
$courseStats = $singledegreesection->classschedule->groupBy(function ($schedule) {
    return $schedule->ccourse->course->course_title;
})->map(fn($group) => $group->count());

把$courseStats传到视图后,直接遍历输出:

@foreach ($courseStats as $title => $count)
    {{ $title }} - {{ $count }} <br>
@endforeach

方法二:数据库层面分组(适合大型数据集,性能更优)

直接通过数据库查询完成分组统计,减少内存消耗:

$courseStats = $singledegreesection->classschedule()
    ->join('ccourses', 'class_schedules.ccourse_id', '=', 'ccourses.id')
    ->join('courses', 'ccourses.course_id', '=', 'courses.id')
    ->selectRaw('courses.course_title, COUNT(class_schedules.id) as total')
    ->groupBy('courses.course_title')
    ->get()
    ->pluck('total', 'course_title');

视图层的输出代码和方法一完全一致。

注意事项

视图的核心职责是展示数据,复杂的统计逻辑放在控制器或模型层更符合MVC架构;数据库层面的分组查询比集合分组性能更优,数据量大时差异会更明显。

内容的提问来源于stack exchange,提问作者Mohan Palanisamy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 18:20:56