我想使用ajax向视频添加不喜欢的系统,但数据不会进入数据库。
控制器
public function like(Request $request)
{
$video_id = $request['videoId'];
$is_like = $request['isLike'] === 'true';
$update = false;
$video = Video::find($video_id);
if (!$video) {
return null;
}
$user = Auth::user();
$like = $user->likes()->where('video_id', $video_id)->first();
if ($like) {
$already_like = $like->like;
$update = true;
if ($already_like == $is_like) {
$like->delete();
return null;
}
} else {
$like = new Like();
}
$like->like = $is_like;
$like->user_id = $user->id;
$like->video_id = $video->id;
if ($update) {
$like->update();
} else {
$like->save();
}
return null;
}
视图
刀片和js
<header class="mhead col video" data-videoid="{{ $video->id }}">
<div class="mhead__inner">
<h1 class="mhead__h">{{ $video->name }}</h1>
<div class="mhead__utility">
<ul id="rating_options" class="rating-list">
<li>
<a href="#" class="btn btn-xs btn-warning like">
{{ Auth::user()->likes()->where('video_id', $video->id)->first() ? Auth::user()->likes()->where('video_id', $video->id)->first()->like == 1 ? 'You like this video' : 'Like' : 'Like' }}</a>
|
<a href="#" class="btn btn-xs btn-danger like">
{{ Auth::user()->likes()->where('video_id', $video->id)->first() ? Auth::user()->likes()->where('video_id', $video->id)->first()->like == 0 ? 'You dont like this video' : 'Dislike' : 'Dislike' }}</a>
</li>
</ul>
</div>
</div>
</header>
<script>
var token = '{{ Session::token() }}';
var urlLike = '{{ route('like') }}';
</script>
<script>
var videoId = 0;
$('.like').on('click', function (event) {
event.preventDefault();
videoId = event.target.parentNode.parentNode.dataset['videoid'];
var isLike = event.target.previousElementSibling == null;
$.ajax({
method: 'POST',
url: urlLike,
data: {
isLike: isLike,
videoId: videoId,
_token: token
}
})
.done(function () {
event.target.innerText = isLike ? event.target.innerText == 'Like' ? 'You like this video' : 'Like' : event.target.innerText == 'Dislike' ? 'You dont like this video ' : 'Dislike ';
if (isLike) {
event.target.nextElementSibling.innerText = 'Dislike';
} else {
event.target.previousElementSibling.innerText = 'Like';
}
});
});
</script>
喜欢的模型
class Like扩展Model { 受保护的$ fillable = [ 'like','user_id','video_id', ];
public function user()
{
return $this->belongsTo('App\User');
}
public function video()
{
return $this->belongsTo('App\Video');
}
} 模型用户
public function videos()
{
return $this->hasMany('App\Video');
}
public function likes()
{
return $this->hasMany('App\Like');
}
示范视频
public function user()
{
return $this->belongsTo('App\User');
}
public function likes()
{
return $this->belongsTo('App\Like');
}