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

Laravel中多whereHas筛选条件仅生效第一个的问题求助

Laravel中多whereHas筛选条件仅生效第一个的问题求助

大家好,我最近在做Laravel项目的查询逻辑时遇到了个棘手的问题,想请各位帮忙排查下:

我需要对贷款数据做两层筛选:

  • 第一层:筛选出属于指定钱包(对应参数$walletId)的所有贷款
  • 第二层:在第一层的结果里,只保留那些分期还款项状态为EM DIAS,且到期日在接下来$days天范围内的贷款

但实际测试下来,不管我怎么调换两个whereHas的顺序,始终只有第一个筛选条件生效,第二个筛选完全没起到过滤作用。以下是我的代码实现:

public function getReceivableLoansByWalletId(string $walletId, int $days): Collection
{
    $startDate = Carbon::today();
    $endDate = Carbon::today()->addDays($days);

    return Loan::whereHas('customer.wallet', function ($query) use ($walletId) {
            $query->where('id', $walletId);
        })
        ->whereHas('installments', function ($query) use ($startDate, $endDate) {
            $query->where('status', 'EM DIAS')
                  ->whereBetween('expectedDate', [$startDate, $endDate]);
        })
        ->with(['installments'])
        ->get();
}

另外我注意到原代码里的where('status', '==', 'EM DIAS')用了==,Laravel的查询构造器里其实用单个=就够了,我试着改成单个=后还是没用。有没有大佬能帮我看看问题出在哪?是不是我对whereHas的关联查询逻辑理解有误?

备注:内容来源于stack exchange,提问作者Tomás Abdias

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 08:14:35