我正在使用 Laravel 的 Eloquent ORM,但在加载显示项目时遇到了麻烦。
这是场景:
- 用户关注博客
- 博客有帖子
我有一个名为关系的数据库表,该表用于存储用户 ID 和博客 ID,以显示哪个用户正在关注哪个博客。我有一个用于描述博客的博客表,还有一个用于帖子的表。关系表将是我将用户与博客表连接在一起的数据透视表。现在,我需要在列表中列出用户关注的所有博客中的所有帖子。
这是我的用户模型:
public function following() {
return $this->has_many_and_belongs_to('Blog', 'relationships', 'user_id', 'blog_id');
}
这是我的博客模型:
public function followers() {
return $this->has_many_and_belongs_to('User', 'relationships', 'blog_id', 'user_id');
}
public function posts() {
return $this->has_many('Post');
}
这就是我试图检索列表中的帖子的方式:
$posts = User::with(array('following', 'following.posts'))
->find($user->id)
->following()
->take($count)
->get();
这段代码只列出了实际的博客,我需要他们的帖子。
感谢您的帮助,如果您需要更多详细信息,请告诉我。
解决方案:
我稍微修改了下面接受的答案,我决定使用 JOIN 将 SQL 调用量减少到简单的 1 个调用。这里是:
$posts = Post::join('blogs', 'posts.blog_id', '=', 'blogs.id')
->join('relationships', 'blogs.id', '=', 'relationships.blog_id')
->select('posts.*')
->where('relationships.user_id', '=', $user->id)
->order_by('posts.id', 'desc')
->take($count)
->get();