Рассмотрим следующую модель мира:
- Пользователь может быть участником нуля или более групп пользователей
- Группа пользователей может иметь ноль или более членов группы пользователей
- A Репо может находиться в ноль или более RepoGroup
- RepoGroup может содержать ноль или более Repos
- Группе пользователей может быть предоставлен доступ «для чтения» или «записи» к RepoGroup
(упрощенная) схема базы данных, реализующая эту модель, выглядит следующим образом:
Настройка связи Eloquent многие-ко-многим между пользователем и UserGroup через таблицу user_group_pivot проста, как и эквивалентные отношения между Repo и RepoGroup. Таблица access_rights - это сводная таблица с дополнительной информацией о доступе, но отношения между ClientGroup и RepoGroup также являются отношениями «многие ко многим» и одинаково прямолинейны. Теперь остаются следующие проблемы:
- Отношения между UserGroup и Repo
- Отношения между RepoGroup и User
- Отношения между User и Repo
Это код, который у меня есть на данный момент:
class User extends Model {
public function userGroups() {
return $this->belongsToMany(UserGroup::class, 'user_group_pivot');
}
public function repos() {
# Eloquent wizard can makez magic here?
}
public function repoGroups() {
# Eloquent wizard can makez magic here?
}
}
class UserGroup extends Model {
public function users() {
return $this->belongsToMany(User::class, 'user_group_pivot');
}
public function repos() {
# Eloquent wizard can makez magic here?
}
public function repoGroups() {
return $this->belongsToMany(RepoGroup::class, 'access_rights')
->withPivot(['access']);
}
}
class RepoGroup extends Model {
public function repos() {
return $this->belongsToMany(Repo::class, 'repo_group_pivot');
}
public function users() {
# Eloquent wizard can makez magic here?
}
public function userGroups() {
return $this->belongsToMany(UserGroup::class, 'access_rights')
->withPivot(['access']);
}
}
class Repo extends Model {
public function repoGroups() {
return $this->belongsToMany(RepoGroup::class, 'repo_group_pivot');
}
public function repos() {
# Eloquent wizard can makez magic here?
}
public function repoGroups() {
# Eloquent wizard can makez magic here?
}
}
Я поискал в Интернете примеры, похожие на этот, но они либо явно плагиат Laravel документов, либо в равной степени банально. Я играл с отношением Model :: hasManyThrough (), но безрезультатно. Поэтому я возлагаю свои надежды на Красноречивых волшебников мира. Я могу тебе помочь, плиис?