Laravel Eloquent如何给has关联查询添加包裹状态为成功的筛选条件
解决方法
你可以使用Laravel提供的whereHas方法给关联查询自定义筛选条件,假设你的包裹状态字段为status,成功状态对应值为success,参考代码如下:
场景1:筛选「至少有1个成功状态包裹」的客户
$customers = Customer::whereHas('parcels', function ($query) { // 这里自定义parcels关联的筛选条件 $query->where('status', 'success'); })->get();
场景2:筛选「仅拥有成功状态包裹,无任何非成功包裹」的客户
如果你的需求是客户名下所有包裹全部为成功状态,需要额外添加排除条件:
$customers = Customer::whereHas('parcels', function ($query) { $query->where('status', 'success'); }) // 排除存在非成功包裹的客户 ->whereDoesntHave('parcels', function ($query) { $query->where('status', '!=', 'success'); }) ->get();
说明
whereHas是has方法的扩展,支持传入闭包自定义关联表的查询逻辑,完全兼容你已定义的hasManyThrough关联- 请根据你的实际业务替换代码中的状态字段名、成功状态对应取值即可。
内容的提问来源于stack exchange,提问作者Junior Frogie
相关产品推荐
相关产品推荐

