Laravel 4 таблицы отношений Eloquent

У меня есть четыре таблицы:

Пользователи: идентификатор, имя пользователя
Роли: идентификатор, имя
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');
}

1

Решение

Вы хотите получить все роли из определенного домена в отношении пользователя?

Так что это должно сработать:

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 есть несколько примеров, эта форма действительно интуитивно понятна.

1

Другие решения

Проверять, выписываться Eloquent Triple Pivot (также на Packagist), похоже, что он делает именно то, что вы хотите.

Вы бы настроили свои модели как User, Domain а также RoleUser имеет много 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;
0

По вопросам рекламы [email protected]