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

Laravel新手提问:如何使用with函数设置where条件?

在Laravel中给with添加where条件的实现方法

针对你想在Laravel的with方法中关联查询时添加where条件的需求,这里提供两种常用实现方式,结合你的现有代码给出修改示例:

1. 过滤关联模型的返回数据

如果希望加载account关联时,只获取满足特定条件的关联记录(主模型User仍会全部返回,只是不符合条件的account会为空),可以在with中传入闭包:

比如要筛选account表中kyc_status为rejected的记录,代码修改如下:

$users = User::with(['account' => function ($query) {
    // 这里写入关联模型的where条件
    $query->where('kyc_status', 'rejected');
}])->orderBy('created_at', 'desc');

2. 过滤主模型(仅保留有符合条件关联的User)

如果只想查询存在符合条件的account的User,需要用whereHas方法,它会直接过滤掉没有满足条件关联的主模型:

$users = User::with('account')
    ->whereHas('account', function ($query) {
        // 关联模型的筛选条件
        $query->where('kyc_status', 'rejected');
    })
    ->orderBy('created_at', 'desc');

结合你的现有代码的完整示例

示例一:加载符合条件的account,保留所有User

public function rejectedkyc(Request $request)
{
    $sort_search = null;
    $users = User::with(['account' => function ($query) {
        $query->where('kyc_status', 'rejected'); // 替换为你的account表条件
    }])->orderBy('created_at', 'desc');

    if (!empty($request->search))
    {
        $sort_search = $request->search;
        $users->where(function ($q) use ($sort_search)
        {
            $q->where('name', 'like', '%' . $sort_search . '%')
              ->orWhere('email', 'like', '%' . $sort_search . '%')
              ->orWhere('phone', 'like', '%' . $sort_search . '%')
              ->orWhere('referral_code', 'like', '%' . $sort_search . '%')
              ->orWhere('username', 'like', '%' . $sort_search . '%');
        });
    }
    $user_type = null;
    if (!empty($request->user_type))
    {
        $user_type = $request->user_type;
        $users->where('user_type', 'like', '%' . $user_type . '%'); // 单个条件无需额外闭包
    }

    $users = $users->paginate(15);
    return view('backend.customer.customers.pending', compact('users', 'sort_search', 'user_type'));
}

示例二:仅保留有符合条件account的User

public function rejectedkyc(Request $request)
{
    $sort_search = null;
    $users = User::with('account')
        ->whereHas('account', function ($query) {
            $query->where('kyc_status', 'rejected'); // 关联模型筛选条件
        })
        ->orderBy('created_at', 'desc');

    if (!empty($request->search))
    {
        $sort_search = $request->search;
        $users->where(function ($q) use ($sort_search)
        {
            $q->where('name', 'like', '%' . $sort_search . '%')
              ->orWhere('email', 'like', '%' . $sort_search . '%')
              ->orWhere('phone', 'like', '%' . $sort_search . '%')
              ->orWhere('referral_code', 'like', '%' . $sort_search . '%')
              ->orWhere('username', 'like', '%' . $sort_search . '%');
        });
    }
    $user_type = null;
    if (!empty($request->user_type))
    {
        $user_type = $request->user_type;
        $users->where('user_type', 'like', '%' . $user_type . '%');
    }

    $users = $users->paginate(15);
    return view('backend.customer.customers.pending', compact('users', 'sort_search', 'user_type'));
}

额外提示

  • 若要给关联模型添加多个where条件,直接在闭包内链式调用where即可,比如$query->where('status', 'rejected')->where('verified', 0);
  • 原代码中user_type的筛选无需额外嵌套闭包,单个条件直接写where更简洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:50:23