为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕田峪9158850 2023-10-21 16:35:54
我所说的用户标签是指用户可以关注标签。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\Posttagfollow() 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,然后循环访问每个标签。
查看完整描述

1 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

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()


查看完整回答
反对 回复 2023-10-21
  • 1 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信