在您的场景中,一个用户可以为多个公司工作,每个公司可以有多个团队.您希望轻松查看用户属于哪些公司,以及他们在这些公司中所属的特定团队.
为此,您可以在User模型中创建一个名为"companyWithTeams"的函数.
该功能将识别一个用户可以链接到多个公司,并使用名为"CompanyUser"的透视表标签来跟踪这些关系.它还可以从"CompanyUser"中获得user_ids
分,以链接正确的团队.此函数将获取用户所属的公司,但也可以立即获取这些公司内的团队.
User Model:
public function companyWithTeams()
{
return $this->belongsToMany(Company::class)
->using(CompanyUser::class)
->withPivot('user_id')
->with(['teams' => function ($query) {
// Filter teams to those that the user belongs to
$query->whereHas('users', function ($query) {
$query->where('user_id', $this->id);
});
}]);
}
Company Model:个
public function users()
{
return $this->belongsToMany(User::class)
->using(CompanyUser::class)
->withPivot('user_id');
}
public function teams()
{
return $this->hasMany(Team::class);
}
Team Model:个
public function company()
{
return $this->belongsTo(Company::class);
}
public function users()
{
return $this->belongsToMany(User::class)
->using(TeamUser::class)
->withPivot('user_id');
}
In your controller you can access:个
$user = User::find(1);
$companyWithTeams = $user->companyWithTeams;
$companyName = $companyWithTeams->name;
foreach ($companyWithTeams->teams as $team) {
echo $team->name;
}
here is a similar question:
How to get records from 3 belongsToMany