通过子表

时间:2017-02-21 08:41:04

标签: php laravel-5 eloquent

我正在尝试实施一个博客类型的网站,用户可以对帖子进行评分。所以关系是这样的:

Blog -> blog_links; To Many fk = blog_id
User -> blog_links; To Many fk = user_id

我尝试过这些解决方案,每次都会遇到不同的错误:

User::hasManyThrough(Blog::class, BlogLink::class);

那没用,所以我尝试了查询范围:

scopeWithLinksAndResorts($query) {
    return $query->with(['resorts' => function($q) {
        $q->ordered()->withLinks();
    }]);
}

这似乎没有返回任何结果。所以我不确定我在这里做错了什么。这是一个表格示例:

博客

id    Title    Text
1     Test     This is a test blog

用户

id    email
1     test@test.com

blog_links

id    blog_id    user_id    rating
1     1          1          4

现在,我希望得到用户评价的博客和评分。但正如我所说,我没有结果。有人能帮忙吗?

1 个答案:

答案 0 :(得分:1)

在您的用户模型中定义博客的关系

/**
 * 
 */
public function blogs()
{
    return $this->belongsToMany('App\Blog', 'blog_links', 'user_id', 'blog_id')->withPivot('rating');
}

然后在您的Blog模型中定义用户的关系

/**
 * 
 */
public function users()
{
    return $this->belongsToMany('App\User', 'blog_links','blog_id', 'user_id');
}

要让所有用户使用他们的博客和评分,您可以\App\User::with('blogs')->get()

我不确定这是否是你想要的,但希望它有所帮助。