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

如何在Laravel中筛选已缴费(Paid)与未缴费(Not Paid)的学生

实现方案

你可以通过传入缴费状态参数,结合Laravel查询构造器的when方法动态拼接where/whereNot条件,修改后的代码如下:

// 新增接收的筛选参数:$paymentStatus 可选值为 paid(已缴费)/ not_paid(未缴费)
$queryBuilder = Student::query()
    ->leftJoin('fee_scheem_maps', 'students.students_id', '=', 'fee_scheem_maps.sfc_student_id')
    ->leftJoin('fee_scheems', 'fee_scheem_maps.sfc_feescheem_id', '=', 'fee_scheems.fee_scheems_id')
    ->leftJoin('individual_fee_scheems', 'fee_scheem_maps.sifc_feescheem_id', '=', 'individual_fee_scheems.ifs_id')
    ->leftJoin('fee_groups', 'fee_scheems.fee_scheems_id', '=', 'fee_groups.fg_fee_scheem_id')
    ->leftJoin('school_fee_collectors', 'students.students_id', '=', 'school_fee_collectors.fc_student_id')
    // 动态处理缴费状态筛选
    ->when($paymentStatus, function ($query) use ($paymentStatus, $fromDate) {
        // 已缴费:走正向where条件匹配对应缴费记录
        if ($paymentStatus === 'paid') {
            return $query->where('school_fee_collectors.fc_fee_group_id', $fromDate);
        }
        // 未缴费:走反向条件,可根据业务需要选whereNot/whereNull等写法
        if ($paymentStatus === 'not_paid') {
            // 写法1:直接用whereNot反向匹配正向条件(Laravel 6+以上版本支持)
            return $query->whereNot(function ($q) use ($fromDate) {
                $q->where('school_fee_collectors.fc_fee_group_id', $fromDate);
            });
            // 写法2:针对left join场景直接判断关联字段为空,性能更优
            // return $query->whereNull('school_fee_collectors.fc_fee_group_id');
        }
    })
    ->select('*', DB::raw('count(students_id) as total'));

如果筛选逻辑复杂需要复用,还可以把基础条件抽成独立闭包,避免重复编码:

// 抽离公共基础条件
$feeMatchCondition = function ($query) use ($fromDate) {
    return $query->where('school_fee_collectors.fc_fee_group_id', $fromDate);
};

// 调用时动态选择正向/反向条件
$queryBuilder->when($paymentStatus === 'paid', $feeMatchCondition)
    ->when($paymentStatus === 'not_paid', fn($q) => $q->whereNot($feeMatchCondition));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:48:03