У меня есть четыре таблицы:
Пользователи: идентификатор, имя пользователя
Роли: идентификатор, имя
ID домена, название
Идентификатор DomainsAssignedRolesUsers, идентификатор роли, идентификатор пользователя, идентификатор домена
Я хочу получить все пользовательские роли для домена.
Я делаю:
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 есть несколько примеров, эта форма действительно интуитивно понятна.
Проверять, выписываться 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;