簡體   English   中英

Laravel 5.5 HasManyThrough關系

[英]Laravel 5.5 HasManyThrough Relationship

我有以下數據庫:

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 如上所述,如果您已為其創建Page ,那么您就是Team一員。

我嘗試了以下方法:

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或其他方式。

使用BelongsToMany關系:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM