Laravel 4 tables relationship Eloquent


Laravel 4 tables relationship Eloquent

我有四个表:

用户: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上),它听起来正是你想要的。

您可以将模型设置为UserDomainRole(一个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;