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

Laravel ORM动态字段查询:根据API请求参数构建查询

Laravel 动态构建ORM查询方案

针对你的需求,这里提供几种简洁的实现方式,自动根据请求参数生成对应的WHERE条件:

基础版:直接遍历所有请求参数

如果所有传入的参数都对应数据库字段,且不需要额外过滤,可以直接循环参数构建查询:

// 初始化查询构造器
$query = YourModel::query();

// 遍历所有查询参数
foreach (request()->query() as $field => $value) {
    // 可选:排除不需要作为查询条件的参数(比如分页参数)
    if (in_array($field, ['page', 'per_page', 'sort'])) {
        continue;
    }
    
    // 添加WHERE条件
    $query->where($field, $value);
}

// 执行查询并获取结果
$results = $query->get();

安全版:限制允许查询的字段

为了避免用户传入非法字段(比如不存在的数据库列)导致错误或安全问题,可以先过滤出允许的字段:

// 定义允许作为查询条件的字段列表
$allowedFields = ['brand', 'car', 'color', 'type'];

// 从请求中只获取允许的字段,并过滤掉空值
$filters = array_filter(request()->only($allowedFields));

// 直接传入数组构建WHERE条件
$results = YourModel::where($filters)->get();

进阶版:支持数组类型参数

如果需要处理类似color[]=red&color[]=blue的多值参数,可以自动判断参数类型,使用whereIn:

$query = YourModel::query();

foreach (request()->query() as $field => $value) {
    if (in_array($field, ['page', 'per_page'])) continue;
    
    if (is_array($value)) {
        // 多值参数使用whereIn
        $query->whereIn($field, $value);
    } else {
        // 单值参数使用where
        $query->where($field, $value);
    }
}

$results = $query->get();

注意事项

  • 确保请求参数的名称和数据库表字段名完全一致,否则需要做映射处理(比如参数名是car_id对应字段car_id)
  • 如果需要模糊查询(比如color=re匹配red),可以在循环中判断字段类型,替换为where($field, 'like', "%{$value}%")
  • 复杂查询场景(比如范围查询、关联表查询)可以在循环中增加字段判断逻辑,针对性处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:15:33