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

Laravel Eloquent多参数筛选返回结果不符合预期修复方案

Laravel Eloquent 多参数联合筛选问题修正

问题原因

你当前代码使用了orWhereBetween方法,导致查询逻辑为「满足公司名称条件 或者 满足日期区间条件」,只要符合任意一个条件就会返回数据,因此会出现公司bb的记录符合日期区间就被返回的问题。你的需求是两个条件同时满足,需要把逻辑或改为逻辑与。

基础修正代码

直接把orWhereBetween替换为whereBetween即可:

$objFetch = OpenOrder::where('companyName', $request->majorCompanies)
    ->whereBetween(
        'StartDate',
        [$request->startDate_start, $request->startDate_end]
    )
    ->orderBy('id', 'desc')
    ->get();

return response()->json([
    'success' => true,
    'objects' => $objFetch
]);

可选参数优化方案

如果你的筛选参数是可选的(比如用户可以只选公司不选日期,或者只选日期不选公司),可以用Laravel提供的when方法做动态条件判断,避免空参数查询异常:

$objFetch = OpenOrder::query()
    // 只有传入公司参数才加公司筛选条件
    ->when($request->filled('majorCompanies'), function ($query) use ($request) {
        $query->where('companyName', $request->majorCompanies);
    })
    // 只有传入完整的起止日期才加日期区间筛选
    ->when($request->filled(['startDate_start', 'startDate_end']), function ($query) use ($request) {
        $query->whereBetween('StartDate', [
            $request->startDate_start,
            $request->startDate_end
        ]);
    })
    ->orderBy('id', 'desc')
    ->get();

return response()->json([
    'success' => true,
    'objects' => $objFetch
]);

效果验证

按照你给出的测试条件(选择公司aa、日期范围2/24/2021到2/30/2021),修正后会仅返回两条同时符合「company为aa」和「StartDate在指定区间」的记录,不会返回company为bb的记录,符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 05:09:01