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

Laravel Eloquent关联查询条件未生效返回全部用户数据如何修复?

问题原因

  1. with() 是关联预加载方法,仅会限制返回的关联数据的查询条件,不会对主模型 User 的查询结果做过滤,所以不符合关联条件的用户也会被返回,仅关联字段 orders 为 null,这是你拿到所有User行的核心原因。
  2. 关联定义错误:User 作为主表,一个用户对应多条订单,应该使用 hasMany 定义关联,你现在用的 belongsTo 是从属关联,仅适用于订单表关联所属用户的场景。

修复步骤

第一步:修正关联定义

修改 User 模型的 orders 方法:

public function orders()
{
    return $this->hasMany(Orders::class, 'order_userId', 'id');
}

第二步:使用whereHas过滤主模型

如果仅需要获取符合条件的用户 id 和 name,不需要返回关联的订单数据,直接使用以下代码:

$data = User::whereHas('orders', function ($query) {
    $query->where('order', false)
          ->whereNull('uploadId');
})->pluck('name', 'id');

如果需要同时返回符合条件的订单数据,可以搭配 with 一起使用:

$data = User::whereHas('orders', function ($query) {
    $query->where('order', false)
          ->whereNull('uploadId');
})->with(['orders' => function ($query) {
    $query->where('order', false)
          ->whereNull('uploadId');
}])->get(['id', 'name']);
优化写法(Laravel 9+ 支持)

可以用 withWhereHas 简化重复的闭包逻辑:

$data = User::withWhereHas('orders', function ($query) {
    $query->where('order', false)
          ->whereNull('uploadId');
})->get(['id', 'name']);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:36:03