我有Post
模型和Like
模型。
当我进入用户页面时,我可以看到他喜欢的所有帖子。现在,如果正在访问用户页面的登录用户已经喜欢帖子,我想要指示一个小图标。
这就是我选择用户喜欢的帖子的方式(不是已登录的用户,而是个人资料所有者):
$likesPost = Post::with('user')->join('likes', function ($join) use ($user) {
$join->on('likes.likeable_id', '=', 'id')->where('likes.user_id', '=', $user->id)->where('likes.likeable_type','=', Post::class);
})->get();
现在我还要检查经过身份验证的用户是否已经喜欢此帖子以及此查询。我尝试了很多东西,但我不确定如何解决这个问题。我使用多态关系。
答案 0 :(得分:2)
首先,我会稍微改变一下您的初始查询。我会像这样得到用户喜欢的帖子(假设<label>
Password :
<div>
<input type="password" placeholder="Input Password" id="pass" name="pass">
</div>
</label>
<input type="button" value="Submit" id="submit" onClick="validate()">
<div id="errors"></div>
有Post
关系):
likes
接下来,您可以获取当前登录用户的喜欢帖子,如下所示:
$profileLikedPosts = Post::whereHas('likes', function($query) use ($user) {
return $query->where('user_id', $user->id);
})
->get();
现在,在您的刀片式模板中,当您浏览个人资料用户(// The "whereIn" just limits the results to those posts already retrieved
// for the profile user. Not required, but gives a little performance boost
// if this collection doesn't need the non-profile-liked posts.
$authUser = Auth::user();
$authLikedPosts = Post::whereHas('likes', function($query) use ($authUser) {
return $query->where('user_id', $authUser->id);
})
->whereIn('id', $profileLikedPosts->lists('id'))
->get();
)的热门帖子时,您可以使用Collection $profileLikedPosts
方法检查该帖子是否也被登录用户:
contains()