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
相关产品推荐
相关产品推荐

