【发布时间】:2021-05-24 14:48:25
【问题描述】:
我正在尝试像这样建立 3 个表的关系,
users
id
name
roles
id
name
companies
id
name
company_role_user
user_id
role_id
company_id
User.php 模型中的关系
public function companies() {
return $this->belongsToMany(Company::class, 'company_role_user', 'user_id', 'company_id');
}
public function roles() {
return $this->belongsToMany(Role::class, 'company_role_user', 'user_id', 'role_id');
}
public function role() {
// relationship to get role of specific company
}
Company.php 模型中的关系
public function users() {
return $this->belongsToMany(User::class, 'company_role_user', 'company_id', 'user_id');
}
public function roles() {
return $this->belongsToMany(Role::class, 'company_role_user', 'company_id', 'role_id');
}
public function role() {
// relationship to get role of specific user
}
我想获得这样的特定公司的用户角色
User::find(1)->companies[0]->role->name
或
Company::find(1)->users[0]->role->name
【问题讨论】:
-
公司和用户有很多
Roles,你不能像Company::find(1)->users[0]->role->name提供的例子那样只得到一个角色 -
公司和用户各自拥有许多角色。但是对于特定的公司和特定的用户,只有一个角色。因为 company_role_user 表没有重复的行条目。 @Kloshar4o
-
如果我在单个项目中获取数组,我没有问题。我可以这样得到,Company::find(1)->users[0]->role[0]->name
-
看起来您正在尝试“多对多”连接 3 个表,如果可以,您应该考虑简化此操作,很少需要多对多表,使其更简单:用户属于公司, Company hasMany User, User hasMany Role, 所以你可以做类似 User::find(1)->roles, Company::find(1)->user->roles 为什么公司应该有角色?
-
公司不应该有角色。但是公司用户有一个角色。例如,user1 是 company1 的管理员,user1 是 company2 的成员,user2 是 company1 的成员。这里 admin 和 member 是角色。我怎样才能得到这个?
标签: php laravel eloquent relationship eloquent-relationship