Laravel在hasManyThrough中包含用户的帖子

时间:2018-05-19 21:52:28

标签: php mysql laravel laravel-5

我正在创建一个社交媒体应用程序,其中用户的订阅源是通过经过身份验证的用户上的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函数中包含经过身份验证的用户的帖子?

1 个答案:

答案 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;