获取用户标签的所有帖子?

我所说的用户标签是指用户可以关注标签。Tagfollow 我有一个名为Tagfollow 的模型


class Tagfollow extends Model

{

    public function user()

    {

        return $this->belongsTo(User::class);

    }

}

除此之外,我还有 User、Tag 和 Post 模型,它们之间的关系如下。


邮政


user() belongsTo App\User 

tags() belongsToMany App\Tag

用户


posts() hasMany App\Post

tagfollow() hasMany App\Tagfollow

标签


posts() belongsToMany App\Post

我不完全确定关系是否正确。


我想获取用户关注的所有标签的 ID,然后获取每个标签的所有帖子。


这是我到目前为止的代码。


    $user = Auth::user();

    $tag_ids= $user->tagfollow()->pluck('tag_id')->toArray();

    $tags=Tag::whereIn('id', $tag_ids)->get();

    $post_ids=[];

    foreach ($tags as $tag) {

        $post_ids = array_merge($post_ids, $tag->posts()->pluck('post_id')->toArray());

    }

    $posts =Post::whereIn('user_id', $user_ids)->whereIn('id', $post_ids)->orderby('created_at', 'desc')->paginate(20);

$user_ids 是授权用户的关注者的用户 ID 列表。


这段代码可以工作,它只获取其中一个 whereIn 子句的帖子。必须有一种更好的方法来使用 Eloquent 来做到这一点,比如只从用户标签获取帖子,而不是获取标签 id,然后循环访问每个标签。


慕田峪9158850
浏览 97回答 1
1回答

撒科打诨

whereHas您可以在关系查询上使用// Get all tags id followed by user$tagsId = $user->tagFollow()->pluck('tag_id')->toArray();// Get all posts with corrensponding tag$posts = Post::whereHas('tags', function ($query) use ($tagsId) {  $query->whereIn('tags.id', $tagsId);})->get()
打开App,查看更多内容
随时随地看视频慕课网APP