我正在创建一个社交媒体应用程序,其中用户的订阅源是通过经过身份验证的用户上的hasManyThrough
函数生成的,如下所示:Auth::user()->feed
。调用的函数如下所示:
public function feed() {
$posts = $this->hasManyThrough(
'App\Post',
'App\Follow',
'follow_by',
'user_id',
'id',
'target_id'
)->with('user', 'likes', 'comments')
->orderBy('id', 'DESC');
return $posts;
}
这样做是因为我想检查经过身份验证的用户正在关注哪些用户,然后查找这些人发布的帖子。但是,我还想在查询中包含经过身份验证的用户的帖子。以前,我已经单独完成了这个
$selfPosts = Post::where('user_id', Auth::user()->id)->with('user', 'likes', 'comments')->get();
然后使用$posts = $selfPosts->merge($followPosts)->sortByDesc('id');
合并查询。
合并查询的问题很多,例如我不能使用limit或offset。我的问题是,如何在feed
函数中包含经过身份验证的用户的帖子?
答案 0 :(得分:1)
正如Colin Barstow在评论中所说,一个简单的解决方案可能是解决这个问题的最佳方案,而不是做很多高级关系和合并。这是我的最终解决方案(感谢科林):
$DB_follows = Follow::where('follow_by', Auth::user()->id)->get();
$follows = [Auth::user()->id];
foreach ($DB_follows as $follow) {
array_push($follows, $follow->target_id);
}
$posts = Post::whereIn('user_id', $follows)->with('user', 'likes', 'comments')->orderBy('id', 'DESC')->get();
return $posts;