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

Laravel Eloquent如何查询多对多关系中未关联proyect的同公司用户

Laravel Eloquent 实现未分配项目同公司用户查询

前置准备

确保你已经在对应模型中定义好了多对多关联:

  • User 模型(app/Models/User.php)中添加项目关联:
public function proyects()
{
    return $this->belongsToMany(Proyect::class);
}
  • Proyect 模型(app/Models/Proyect.php)中添加用户关联:
public function users()
{
    return $this->belongsToMany(User::class);
}

实现方式1:推荐写法(基于关联查询,更符合Eloquent规范)

直接使用whereDoesntHave方法筛选不存在指定项目关联的用户,代码逻辑更简洁,可读性更高:

$availableUsers = User::where('company_id', $company_id)
    ->whereDoesntHave('proyects', function ($query) use ($proyect_id) {
        $query->where('proyects.id', $proyect_id);
    })
    ->get();

该写法最终生成的SQL执行效果和你提供的原生SQL完全一致,无需手动处理中间表关联逻辑,后续关联规则调整时只要修改模型关联定义即可,维护成本更低。

实现方式2:左连接写法(和原生SQL逻辑完全对齐)

如果你需要完全匹配你现有原生SQL的写法,也可以通过查询构造器手动实现左连接逻辑:

$availableUsers = User::from('users as u')
    ->leftJoin('proyect_user as pu', function ($join) use ($proyect_id) {
        $join->on('u.id', '=', 'pu.user_id')
            ->where('pu.proyect_id', '=', $proyect_id);
    })
    ->where('u.company_id', $company_id)
    ->whereNull('pu.proyect_id')
    ->get();

注意事项

你提供的原生SQL中存在变量笔误$company_i,实际使用时请修正为$company_id避免查询报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:15:02