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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:36:06