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

Laravel技术问题:如何在查询中获取count统计数据?

在Laravel中实现带Count统计的复杂查询

嘿,我来帮你把这段MySQL查询转换成Laravel的写法,确保能正确获取到num这个count统计数据。这里我用Laravel的**查询构建器(Query Builder)**来实现,完全对应你给出的原生SQL逻辑:

步骤1:构建子查询(统计count的核心部分)

首先处理你SQL里的子查询T,这部分负责按e_id分组并统计关联数量:

$subQuery = DB::table('electcourse')
    ->select(
        'electcourse.id as e_id',
        'h_id',
        'd_id',
        'ref_id',
        'e_semester',
        'stdate',
        'endate',
        'c_month',
        // 用DB::raw生成count统计字段,作为结果列返回
        DB::raw('count(e_id) as num'),
        // 注意:原主查询需要credit_num和is_required,子查询必须先选中这两个字段
        'credit_num',
        'is_required'
    )
    ->leftJoin('period', 'electcourse.p_id', '=', 'period.id')
    ->leftJoin('hospitalxdepartment', 'electcourse.hd_id', '=', 'hospitalxdepartment.id')
    ->leftJoin('board', 'electcourse.id', '=', 'board.e_id')
    ->where('st_id', 'admin')
    ->groupBy('e_id');

步骤2:主查询关联其他表获取名称字段

接着把上面的子查询当作临时表T,关联hospital、department等表,取出需要的名称类字段:

$finalResult = DB::table($subQuery, 'T')
    ->select(
        'T.e_id',
        'hospital.h_name',
        'department.d_name',
        'drf.drf_name', // 这里替换成你实际的关联表别名/字段
        'T.credit_num',
        'T.is_required',
        'T.e_semester',
        'T.stdate',
        'T.endate',
        'T.c_month',
        'T.num' // 这就是我们要的count统计结果
    )
    ->leftJoin('hospital', 'T.h_id', '=', 'hospital.id')
    ->leftJoin('department', 'T.d_id', '=', 'department.id')
    // 补上你没写完的关联,比如和drf表的关联(假设ref_id对应drf表的id)
    // ->leftJoin('your_drf_table as drf', 'T.ref_id', '=', 'drf.id')
    ->get();

关键注意点

  • 为什么用DB::raw()?因为Laravel自带的count()方法会直接返回单个统计数值,而我们需要把count作为查询结果的一个字段返回,所以用DB::raw()嵌入原生SQL片段更合适。
  • 字段完整性:原SQL主查询里用到的credit_num和is_required,必须在子查询的select中先选中,否则主查询会找不到这些字段。
  • 关联补充:你原SQL里left join department on d_id =...没写完,记得在主查询里补上对应的关联语句,替换掉代码里的注释部分。

如果你习惯用Eloquent模型,也可以基于Electcourse模型来构建这个查询,但Query Builder的写法更直接匹配你的原生SQL逻辑,上手更快。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:27:33