【发布时间】:2018-06-29 06:33:43
【问题描述】:
我有 laravel 博客,我已经使用 Vue.js 实现了“添加到收藏夹”选项,并且效果很好。现在我想实现类似的帖子(每个用户都可以喜欢更多次),就像中等拍手一样,我已经有了拍手按钮并且它可以工作,每次点击 $likeCounter 变量都会更新并保持,问题是如何将该变量($likeCounter)插入数据库(使用 javascript、vuejs ...)?喜欢表有这些列 user_id、post_id、likes_count user_id & post_id (pivot) 使用 vue.js 插入
在我的控制器中,我有这个方法来附加 user_id 和 post_id
public function like(Post $post)
{
Auth::user()->likes()->attach($post->id);
return back();
}
在用户模型中,我有这种方法可以为经过身份验证的用户获取所有喜欢的帖子
/**
* Get all of liked posts for the user.
*/
public function likes()
{
return $this->belongsToMany(Post::class, 'likes', 'user_id', 'post_id')->withTimeStamps();
}
在 Post Model 中我有这个方法
/**
* Determine whether a post has been liked by a user.
*
* @return boolean
*/
public function liked()
{
return (bool) Like::where('user_id', Auth::id())
->where('post_id', $this->id)
->first();
}
public function likes()
{
return $this->hasMany('App\Models\Like');
}
在 Like.vue 中
methods: {
like(post) {
axios.post('/like/'+post)
.then(response => this.isLiked = true)
.catch(response => console.log(response.data));
},
我使用一些 javascript 在每次点击时更新一个变量,直到当前用户达到最大值,即每个经过身份验证的用户最多 50 次鼓掌
function updateNumberOfClaps() {
numberOfClaps < 50 ? numberOfClaps++ : null
clapCount.innerHTML = "+" + numberOfClaps
clapTotalCount.innerHTML = initialNumberOfClaps + numberOfClaps
}
而且效果很好(用 user_id 和 post_id 附加新的like),如果同一个用户再次点击同一个帖子,一个新的like 将附加到具有相同 user_id 和相同 post_id 的数据库中。 问题是我如何在 likes_count 列中存储变量计数器并在每次点击时更新它,所以我不想一次又一次地将同一个帖子与同一个用户附加,我想存储一个变量,说明有多少用户喜欢这个帖子。 我希望这很清楚
【问题讨论】:
-
问题出在哪里,前端还是后端?
-
@Tpojka 后端,将变量存储到数据库并在每次点击时更新,变量使用javascript更新
-
是否有限制用户可以点击一篇文章?
-
@Tpojka 只有经过身份验证的用户才能点赞按钮
-
你说可以多次,但是一个用户一个帖子的数量有限制吗?
标签: javascript php laravel vue.js