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

Laravel查询问题:传入'all'作为year参数时无法正常执行

解决Laravel中year参数为all的查询问题

你可以通过动态添加查询条件来处理year参数为all的情况,同时还要修正原代码里的逻辑错误(orWhere位置不当会导致查询逻辑混乱),具体修改如下:

修正后的控制器代码

public function findResultServiceFeeDubai($address, $type, $year, $norows){
    $result = DB::table('service-charges')
        ->select('address', 'year', 'type', 'total_charge_sqft')
        ->where(function($query) use ($address) {
            $query->where('address', 'LIKE', "%{$address}%");
        })
        ->where('type', $type)
        // 仅当year不是all时,才添加年份筛选条件
        ->when($year !== 'all', function($query) use ($year) {
            $query->where('year', $year);
        })
        ->limit($norows)
        ->get();

    return response()->json($result, 200);
}

关键说明

  1. 动态条件处理:用when()方法实现逻辑分支——当$year不等于all时,自动添加年份筛选;如果是all,则跳过该条件,自然查询所有年份的数据。
  2. 修正逻辑冲突:把地址的模糊查询放到闭包where(function($query) {...})里,避免原代码中orWhere和后续where的逻辑冲突,保证查询规则是「地址匹配 且 类型匹配 且(年份匹配/所有年份)」。

可选优化:路由参数名统一

路由里的{name}参数和控制器的$address参数名不一致,建议改成一致的,方便后续维护:

Route::get('/findResultServiceFeeDubai/{address}/{type}/{year}/{norows}',[UserController::class,'findResultServiceFeeDubai'])->name('findResultServiceFeeDubai');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:55:18