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

Laravel模型关系实现:获取用户关联企业的专属团队

解决方案

首先确保你的模型已经配置好基础关联:

基础关联配置

User 模型

public function companies()
{
    return $this->belongsToMany(Company::class);
}

public function teams()
{
    return $this->belongsToMany(Team::class);
}

Team 模型

public function company()
{
    return $this->belongsTo(Company::class);
}

public function users()
{
    return $this->belongsToMany(User::class);
}

专属团队关联实现

在 User 模型中添加以下方法,直接通过模型关联获取所属企业下仅属于当前用户的团队:

public function exclusiveTeams()
{
    return $this->belongsToMany(Team::class)
        // 关联到用户所在的企业,确保团队属于用户的企业
        ->join('company_user', 'teams.company_id', '=', 'company_user.company_id')
        ->where('company_user.user_id', $this->id)
        // 统计团队的用户数量,筛选仅含当前用户的团队
        ->leftJoin('team_user as tu', 'teams.id', '=', 'tu.team_id')
        ->groupBy('teams.id')
        ->havingRaw('COUNT(tu.user_id) = 1')
        // 避免重复字段,仅选择团队表数据
        ->select('teams.*')
        ->distinct();
}

使用方式

直接通过用户实例调用该关联即可获取目标团队:

$user = User::find(1);
$exclusiveTeams = $user->exclusiveTeams;

代码说明

  1. join('company_user', ...):确保筛选的团队属于当前用户关联的企业,避免跨企业的团队被选中。
  2. leftJoin('team_user as tu', ...):左连接团队用户关联表,用于统计每个团队的用户总数。
  3. groupBy('teams.id') + havingRaw('COUNT(tu.user_id) = 1'):分组后筛选出仅包含1个用户的团队。
  4. select('teams.*') + distinct():确保返回的团队数据不重复,仅保留团队表的字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:03:27