【发布时间】:2019-11-27 10:22:02
【问题描述】:
我正在使用 Lumen、Vuejs 和 Axios。登录的用户可以发布内容,其他用户可以点赞和评论。我想做的是让人们很明显喜欢这篇文章。但是有人喜欢后我无法切换按钮。
这是我的 Vuejs 代码:
<button class="btn btn-light" @click="likes(item.id)"><i class="far fa-heart"></i></button>
<button class="btn btn-light" @click="likes(item.id)"><i class="fas fa-heart"></i></button>
likes(id){
const axiosConfig = {
headers: {
Authorization: localStorage.getItem('token')
}
};
const postData = {
posts_id: id,
likes: true
};
axios.post('http://lumen.local/like', postData, axiosConfig)
.then(response => {
this.getPosts();
})
.catch(error => {
console.log(error)
});
},
这是我的流明代码:
$post_query = Posts::with('comments')
->with('comments.owner')
->with('likes.isLiked')
->withCount('likes')
->where('user_id', $user->id)
->orderBy('id', 'desc')
->limit($request->limit)
->get();
我尝试制作另一个函数,在那里我可以获取登录用户的 user_id,所以我可以使用 vue-if 更改按钮
public function checkLike(Request $request)
{
$user_name= $request->username;
$user = User::where('username', $user_name)->first();
$post_id = $request->posts_id;
$post = Posts::find($post_id);
$like = Likes::where('posts_id', $post_id)
->where('user_id', $user->id)
->get();
if(count($like) == 0){
return response()->json('no likes');
} else{
return response()->json($like);
}
}
它在邮递员中工作,但我无法在 Vuejs 中实现它,因为我无法在没有 v-for 的情况下获取 user_id。所以我想我应该在posts_query中获取user_id,但我做不到。 你有什么想法吗?
【问题讨论】:
-
只是为了获得更清晰的信息,您可以复制/粘贴您从后面得到的请求响应吗?可以通过一些 JS 变通方法快速完成
-
cmets: Array(1) content: "thehehe" created_at: (...) id: 829 likes: Array(4) likes_count: 4 updated_at: (...) user_id: 217 这是我从 post_query 得到什么。我想我需要喜欢它的人的 user_id。上面的 user_id 来自发布者。
-
好的,谢谢,但我想看看你的
likes数组的内容。该数组是否包含有关喜欢该帖子的用户的信息?如果是,并且它实际上为每个用户提供了 id,那么您将能够调整 VueJS 代码以显示您正在寻找的内容! -
所以我的喜欢数组看起来像这样: created_at: (...) id: (...) is_liked: (...) likes: (...) posts_id: (... ) updated_at: (...) user_id: 220. user_id 给出了喜欢的人的 id。但是如何在 Vuejs 中编写代码来查找经过身份验证的用户?感谢您的回答。
-
好的,现在我们接近目标了;如果我了解您的需求,您是否希望有一个按钮可以在当前用户喜欢它时改变其外观?所以基本上,你得到了当前用户的
user_id,如果你在按钮的liked数组中找到相同的user_id,那么你就可以使按钮变暗或禁用。我说的对吗?
标签: php laravel vue.js axios lumen