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

Laravel查询构建器:根据用户关联职位筛选聊天记录问题

解决方法

你的问题出在with()方法的用法上——with()只是用来预加载并过滤关联的jobs数据,但不会筛选Chat本身,所以会返回所有聊天记录,只是符合user_id条件的jobs会被加载,不符合的jobs为空。

要获取指定用户所属职位的聊天记录,需要用whereHas()来筛选存在符合条件关联的Chat,同时搭配with()预加载关联的jobs避免N+1查询:

$userId = 3;
$chat = Chat::with(['jobs' => function($query) use($userId){
    $query->where('user_id', $userId);
}])->whereHas('jobs', function($query) use($userId){
    $query->where('user_id', $userId);
})->get();

如果你的关联关系定义正确(Chat属于Job,Job属于User),也可以通过嵌套关联简化查询:

$userId = 3;
$chat = Chat::with('jobs.user')
    ->whereHas('jobs.user', function($query) use($userId){
        $query->where('id', $userId);
    })->get();

关键逻辑说明:

  • whereHas('jobs', ...):只查询关联的jobs满足user_id=3的Chat记录,这一步才是真正筛选你需要的聊天数据
  • with('jobs', ...):预加载这些Chat对应的符合条件的jobs数据,避免后续调用关联时产生N+1查询问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:30:52