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

Laravel控制器实现单值/多值动态组合条件查询筛选

Laravel Eloquent 动态多参数查询筛选实现方案

实现思路

利用Laravel查询构造器自带的when方法实现条件动态拼接,无需手动写多层if/else判断参数是否存在,只有对应筛选参数有效时才会将where条件追加到查询中,天然适配单参数、多参数组合的所有筛选场景。

完整实现代码

// 固定拼接所有场景都需要的关联查询,提前初始化查询构造器
$news_paper_machine_ads = newsPaperMachineAds::join('news_paper_district', 'news_paper_district.idnews_paper_district', '=', 'news_paper_machine_ads.news_paper_district_id')
    ->join('news_paper_city', 'news_paper_city.idnews_paper_city', '=', 'news_paper_machine_ads.news_paper_city_id')
    ->join('news_paper_machine_field', 'news_paper_machine_field.idnews_paper_machine_field', '=', 'news_paper_machine_ads.news_paper_machine_field_id')
    // 行政区筛选:参数有效时才生效
    ->when($district, function ($query, $districtVal) {
        return $query->where('district', 'LIKE', "%{$districtVal}%");
    })
    // 城市筛选:参数有效时才生效
    ->when($city, function ($query, $cityVal) {
        return $query->where('news_paper_city', 'LIKE', "%{$cityVal}%");
    })
    // 设备领域筛选:参数有效时才生效
    ->when($machine_field, function ($query, $fieldVal) {
        return $query->where('machine_field', 'LIKE', "%{$fieldVal}%");
    })
    ->get();

适配场景说明

该实现完全覆盖所有动态传参需求:

  • 仅传入district/city/machine_field任意一个参数时,仅拼接对应单条件筛选
  • 传入任意两个参数时,自动拼接两个条件做组合筛选
  • 三个参数同时传入时,拼接三个条件做精准匹配
  • 三个参数均为空/未传入时,不追加任何筛选条件,返回全量关联数据

优化提示

  • 如果参数从Request请求中获取,可以直接使用$request->input('参数名')作为when的第一个判断值,无需提前单独赋值;如果需要严格判断参数存在且不为空字符串,可以替换判断逻辑为$request->filled('参数名'),避免空字符串触发无效筛选。
  • 固定的join逻辑因为所有筛选场景都需要关联三张附表取字段,放在动态条件前固定拼接即可,不会影响筛选逻辑的正确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:36:25