Laravel 5.5 HasManyThrough关系

时间:2018-05-14 10:34:33

标签: php laravel laravel-5 eloquent laravel-5.5

我有以下数据库:

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。如上所述,如果您为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()

其中Pagepublic function scopeOnlyForTeams($query) { return $query->whereNotNull('team_id'); } 上定义为

HasManyThrough

但是我想使用正确的关系,所以想知道我是否应该在这种情况下使用Twig Exception There are no registered paths for namespace "__main__". 或其他东西。

1 个答案:

答案 0 :(得分:2)

使用BelongsToMany关系:

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