我有四个表:
用户:id,用户名
角色:id,name
域id,标题
域分配的角色用户id,角色id,用户id,域id
我想获取域的所有用户角色。
我知道:
User::find(1)->domains->first()->roles
但我得到了所有的域角色,而不仅仅是我的用户。帮助我只获取所选域/的用户角色
我的关系:
// User model:
public function rolesDomain() {
return $this->belongsToMany('Role', 'domainsAssignedRolesUsers', 'user_id', 'role_id');
}
public function domains() {
return $this->belongsToMany('Domain', 'domainsAssignedRolesUsers');
}
// Role model:
public function domains() {
return $this->belongsToMany('Domain', 'domainsAssignedRolesUsers');
}
// Domain model:
public function roles() {
return $this->belongsToMany('Role', 'domainsAssignedRolesUsers', 'domain_id', 'role_id');
}
public function users() {
return $this->belongsToMany('User', 'domainsAssignedRolesUsers', 'domain_id', 'user_id');
}
您想从特定域中获取与用户相关的所有角色吗?
因此,这应该起作用:
User::find(1)->rolesDomain()->where('domain_id', $specificID)->get()
但是,如果您只想从用户的第一个域中获取角色。
User::find(1)->domains()->first()->roles()->get();
如果您只想检索用户的角色。
User::find(1)->rolesDomain()->get()
如果您只想从每个域中检索与用户相关的所有角色。
User::find(1)->domains()->with('roles')->get()
即使Eloquent文档中有几个例子,这个orm也非常直观。
看看Eloquent Triple Pivot(也在Packagist上),它听起来正是你想要的。
您可以将模型设置为User
、Domain
和Role
(一个User
有许多Domain
,每个都可以有一个Role
)。然后查看Github页面上的文档(特别是步骤6),您可以在Domain
模型上定义它:
class Domain extends Eloquent {
...
public function getRolesAttribute() {
return $this->getThirdAttribute();
}
}
然后你可以简单地调用
$user = User::find(1);
$domain = $user->domains->first();
// or
$domain = $user->domains->find(73);
$roles = $domain->roles;
// Or the above can be condensed into just...
$roles = User::findOrFail( 1 )
->domains()
->findOrFail( 73 )
->roles;