我想在显示用户的所有帖子时检查经过身份验证的用户是否喜欢帖子。这是我现在的方法:
public function index(){
$posts = Post::orderBy('created_at', 'desc')->get();
$user = Auth::user();
$liked = Post::with('user')
->whereHas('like', function ($query) use ($user) {
$query->where('user_id', '=', $user->id);
})->get();
return view('index', compact('posts', 'liked'));
}
当我在HTML中执行此操作时:
@if($liked)
<button class="[ btn btn-primary ]">
<i class="fa fa-thumbs-o-up" aria-hidden="true"></i> You like this</button>
@else
<a href="/patinka/{{$p->id}}" type="button" class="[ btn btn-default ]">
<i class="fa fa-thumbs-o-up" aria-hidden="true"></i> Like</a>
@endif
我总是得到&#34;你喜欢这个&#34;即使我不喜欢那篇文章。有人能告诉我这段代码有什么问题吗?
答案 0 :(得分:1)
首先,让我们确保您的关系得到妥善设置。
发布模型:
public function like()
{
return $this->HasMany('App\Like');
}
与模型类似
public function user()
{
return $this->hasOne('App\User', 'id', 'user_id');
}
然后将两个Post
个调用合并在一起运行,如下所示:
$user_id = Auth::id();
$posts = Post::with(['like' => function ($like) use ($user_id) {
return $like->whereHas('user', function ($user) use ($user_id) {
$user->where('id', $user_id);
})->get();
}])->get();
return view('index', compact('posts'));
然后在您看来,您可以进行检查:
@foreach ($posts as $post)
@if(count($post->like))
...
@endforeach