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

如何在Laravel Livewire搜索功能中添加学年学期多筛选条件

实现步骤

1. 前端添加下拉筛选表单

在现有搜索栏的提交表单内新增两个下拉选择框,name属性对应学年sy和学期sem即可:

<!-- 插入到现有搜索表单内部 -->
<select name="sy" id="schoolyear">
  <option value="">全部学年</option>
  <option value="2023-2024" {{ request('sy') == '2023-2024' ? 'selected' : '' }}>2023-2024学年</option>
  <option value="2024-2025" {{ request('sy') == '2024-2025' ? 'selected' : '' }}>2024-2025学年</option>
  <!-- 按需补充更多学年选项 -->
</select>

<select name="sem" id="semester">
  <option value="">全部学期</option>
  <option value="1" {{ request('sem') == 1 ? 'selected' : '' }}>第一学期</option>
  <option value="2" {{ request('sem') == 2 ? 'selected' : '' }}>第二学期</option>
</select>

2. 后端查询逻辑调整

原有代码直接拼接orWhere会导致后续新增的筛选条件逻辑失效,需要把模糊搜索条件封装到闭包内,再叠加学年、学期的条件筛选,修正后代码如下:

// 先获取请求参数
$sy = request('sy');
$sem = request('sem');
$src = '%' . $src . '%'; // 给模糊搜索关键词加通配符,避免like变成精确匹配

$allschedule = DB::table('load_schedule')
    ->leftjoin('emp_info', 'load_schedule.faculty_id', '=', 'emp_info.user_id')
    // 学年筛选:有传值才生效
    ->when($sy, function ($query) use ($sy) {
        return $query->where('load_schedule.sy', $sy);
    })
    // 学期筛选:有传值才生效
    ->when($sem, function ($query) use ($sem) {
        return $query->where('load_schedule.sem', $sem);
    })
    // 所有模糊搜索条件包在闭包内,避免和上层筛选逻辑冲突
    ->where(function ($query) use ($src) {
        $query->where('section', 'like', $src)
              ->orWhere('room', 'like', $src)
              ->orWhere('lastname', 'like', $src)
              ->orWhere('firstname', 'like', $src);
    })
    ->orderBy('lastname', 'ASC')
    ->select('load_schedule.*', 'emp_info.firstname', 'emp_info.lastname')
    ->paginate(10);

// 分页保留筛选参数,避免翻页时筛选条件失效
$allschedule->appends(['sy' => $sy, 'sem' => $sem, 'src' => request('src')]);

注意事项

  • 提前确认load_schedule表中存在sy、sem字段,字段名和存储值类型要和实际业务一致
  • 如果不需要保留全部学年/全部学期的选项,给下拉框加默认值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:36:07