Php 如何在Laravel数据库中存储视频播放进度时间

Php 如何在Laravel数据库中存储视频播放进度时间,php,jquery,ajax,laravel,Php,Jquery,Ajax,Laravel,我有一个用户表和课程表。在用户表中,我有一个watch_history列,我想在其中存储当前播放视频的课程id和当前时间的数据,以便用户可以继续从skip或left视频观看 我是ajax新手,所以我不知道如何使用ajax将数据连续发送到数据库 这是我在控制台中打印当前时间的JS代码 <script> var vid = document.getElementById("player"); $(function() { var

我有一个用户表和课程表。在用户表中,我有一个watch_history列,我想在其中存储当前播放视频的课程id和当前时间的数据,以便用户可以继续从skip或left视频观看

我是ajax新手,所以我不知道如何使用ajax将数据连续发送到数据库

这是我在控制台中打印当前时间的JS代码

<script> 
    var vid = document.getElementById("player"); 

    $(function() {

        var timeout;
         
        $("#player").on("playing pause", function(e) {

            // save reference
            var v = this

            // clear previous timeout, if any
            clearTimeout(timeout)

            // call immediately if paused or when started
            performaction(v.currentTime, v.duration)
            
            // set up interval to fire very 5 seconds
            if (e.type === "playing") {
              timeout = setInterval(function() {
            performaction(v.currentTime, v.duration)
              }, 3000)
            }
        })

        function performaction(currentTime, duration) {
            console.log(currentTime);
        }

    })
   
</script>

var vid=document.getElementById(“播放器”);
$(函数(){
var超时;
$(“#播放器”)。打开(“播放暂停”,函数(e){
//保存引用
var v=这个
//清除以前的超时(如果有)
clearTimeout(超时)
//暂停或启动时立即呼叫
性能(v.currentTime,v.duration)
//设置每5秒开火的间隔
如果(例如,类型==“播放”){
超时=设置间隔(函数(){
性能(v.currentTime,v.duration)
}, 3000)
}
})
功能执行(当前时间、持续时间){
console.log(当前时间);
}
})
如何使用Laravel中的ajax在一个阵列中发送带有课程id的视频计时。我正在使用plry.io视频播放器。上面的JS代码出现在Lesson_video.blade.php页面上,我在该页面上有课程id

我正在做一个大学项目。

在您的html中:

<input type="hidden" name="_token" value="{{csrf_token()}}"/>
路由/web.php
中:

Route::post('/saveTime/{video}', 'InstructorCourseController@saveTime')->name('video.saveTime');
Route::get('/getTime/{video}', 'InstructorCourseController@getTime')->name('video.getTime');//Route for getting the saved time
public function saveTime(Request $request, $video){
    $request->validate([
                'time' => 'required',
                'duration' => 'required'
        ]);
    $user = Auth::user();
    if($user === null){
        return response()->json(['message' => 'User not authenticated', 403);
    }
    $user_id = $user->id;
    $video = Video::where('id',$video)->first();
    if($video === null){
        return response()->json(['message' => 'Video not found', 404);
    }
    $currentTime = $request->time;
    $duration = $request->duration;
    //save them somewhere
    
    return response()->json(['message' => 'Time saved', 200);//send http response as json back to the ajax call

}
public function getTime(Request $request, $video){
    $user = Auth::user();
    if($user === null){
        return response()->json(['message' => 'User not authenticated', 403);
    }
    $video = Video::where('id',$video)->first();
    //get the time from saved time where you saved it with this data
    $playbackTime = Somemodel::where('video_id',$video->id)->where('user_id',$user->id)->get()->last();//use this one if you insert the time instead of updating an existing row each time a time is saved.
    $playbackTime = Somemodel::where('video_id',$video->id)->where('user_id',$user->id)->first();//use this one if you update the time instead of inserting a new row each time a time is saved.

    if($playbackTime === null){
        //there's no saved time
        $playbackTime = 0;
    }else{
        $playbackTime = $playbackTime->currentTime;//use what column you saved the time in.
    }
    return response()->json(['playbackTime' => $playbackTime, 200);
}
在您的
InstructorCourseController.php
中:

Route::post('/saveTime/{video}', 'InstructorCourseController@saveTime')->name('video.saveTime');
Route::get('/getTime/{video}', 'InstructorCourseController@getTime')->name('video.getTime');//Route for getting the saved time
public function saveTime(Request $request, $video){
    $request->validate([
                'time' => 'required',
                'duration' => 'required'
        ]);
    $user = Auth::user();
    if($user === null){
        return response()->json(['message' => 'User not authenticated', 403);
    }
    $user_id = $user->id;
    $video = Video::where('id',$video)->first();
    if($video === null){
        return response()->json(['message' => 'Video not found', 404);
    }
    $currentTime = $request->time;
    $duration = $request->duration;
    //save them somewhere
    
    return response()->json(['message' => 'Time saved', 200);//send http response as json back to the ajax call

}
public function getTime(Request $request, $video){
    $user = Auth::user();
    if($user === null){
        return response()->json(['message' => 'User not authenticated', 403);
    }
    $video = Video::where('id',$video)->first();
    //get the time from saved time where you saved it with this data
    $playbackTime = Somemodel::where('video_id',$video->id)->where('user_id',$user->id)->get()->last();//use this one if you insert the time instead of updating an existing row each time a time is saved.
    $playbackTime = Somemodel::where('video_id',$video->id)->where('user_id',$user->id)->first();//use this one if you update the time instead of inserting a new row each time a time is saved.

    if($playbackTime === null){
        //there's no saved time
        $playbackTime = 0;
    }else{
        $playbackTime = $playbackTime->currentTime;//use what column you saved the time in.
    }
    return response()->json(['playbackTime' => $playbackTime, 200);
}

var data={time:currentTime}//要发送到服务器的数据var dataType=“json”/server$的预期数据类型。post({url:'/saveTime/'+videoId+'/'+userId,//存储时间数据的服务器的url数据:数据,成功:函数(数据,状态){alert(状态);alert(json.parse(数据));},数据类型:dataType})如果我在console语句之后在performaction函数中编写此代码,可以吗。还有什么我们应该写在控制器中的东西吗?我们需要为它创建任何路由吗?是的。如果插入正确的url和正确的数据,它应该可以正常工作。函数性能(currentTime,duration){console.log(currentTime);var data={time:currentTime};var dataType=“json”$.post({url:'/saveTime/'+videoId+'/'+userId,数据:数据,成功:函数(数据,状态){alert(status);alert(JSON.parse(data));},dataType:dataType};}是的,您需要创建一个路由
route::post('/whatrouteyouwant/{video}/'),'videoController@saveTime')->name('video.saveTime');
和一个控制器方法,您可以实际获取用户id,无需在请求中传递。您的代码成功运行。我不知道您的姓名,但我非常感谢您的帮助!因此,我需要的最后一个帮助是如何在视频播放器中让用户节省时间?@Abhishekpardeshi在javascript中,您可以获得节省的时间f可能是从另一条线路上下载,并将视频播放设置在那里?非常感谢。我会尝试。我尝试使用get方法,但仍然无法获取。因此,请您给我从节省的时间中播放视频的代码。@halfer我不知道。我自己不是一个学者。我只是给出了一个如何在laravel中完成的示例,而不是确切的代码tho.t谢谢你的通知。