laravel在hasmanythrough中包含用户的帖子

jtoj6r0c  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(321)

我正在创建一个社交媒体应用程序,其中用户的提要是通过 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 功能?

mtb9vblg

mtb9vblg1#

正如colinbarstow在评论中所建议的,一个简单的解决方案可能是这个问题的最佳解决方案,而不是做很多高级关系和合并。这是我最后的解决方案(谢谢科林):

$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;

相关问题