Laravel 5.5 HasManyThrough Relationship - PullRequest
0 голосов
/ 14 мая 2018

У меня есть следующая база данных:

teams
-----
id
user_id


users
-----
id


pages
-----
id
user_id
team_id -> (nullable)

Таким образом, пользователь может создать команду и создать страницу

В настоящее время у меня есть следующие настройки отношений (замените на $this)

teams_owned() -> $user->hasMany(Team::class);        // Teams a user owns
pages()       -> $user->hasMany(Page::class);        // Page a user created 
user()        -> $team->belongsTo(User::class);      // User who created team
user()        -> $page->belongsTo(User::class);      // User who created the Page

Однако пользователь может присоединиться к команде, создав страницу для этой команды.В этом случае таблица pages заполнит team_id.Если страница создана и не предназначена для команды, значение team_id будет null

Я хотел добавить отношение для User, чтобы присоединить Team s.Как объяснялось выше, вы являетесь частью Team, если вы создали для него Page.

Я пробовал следующее:

public function teams_joined()
{
    return $this->hasManyThrough(Team::class, FundraisingPage::class);
}

Я не уверен, что яследует использовать HasManyThrough в этой ситуации

В качестве резервной копии у меня есть следующее:

public function teams_joined()
{
    $uniqueTeamIds = $this->pages()->onlyForTeams()->get()->pluck('id')->unique();
    return Team::whereIn('id', $uniqueTeamIds)->get();
}

, где onlyForTeams() определяется на Page как

public function scopeOnlyForTeams($query) {
    return $query->whereNotNull('team_id');
}

Но я хотел использовать правильные отношения, поэтому мне было интересно, стоит ли мне использовать HasManyThrough или что-то еще для этой ситуации.

1 Ответ

0 голосов
/ 14 мая 2018

Используйте отношение BelongsToMany:

public function teams_joined()
{
    return $this->belongsToMany(Team::class, 'pages');
}
...