У меня есть следующая база данных:
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
или что-то еще для этой ситуации.