我所说的用户标签是指用户可以关注标签。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,然后循环访问每个标签。
撒科打诨