首页 > 解决方案 > 使用时间表时,Laravel 验证似乎不起作用

问题描述

我得到了每个科目的时间表。我希望时间表是唯一的或不重复的。我有一个用于room, teacher, time,的列daychecker它被分配用于检查时间表。希望该时间表不与周一至周五的time, room, teacher,checker和冲突day

我试图在控制器中测试我的代码,但它似乎不起作用。即使我更新了重复的时间表,它也会出现我放入的异常,但在状态代码中它是 200。有人可以知道这个有什么问题吗?

我的控制器

    public function update(Request $request, Schedule $schedule, $id)
    {
        $schedule = Schedule::findOrFail($id);
        $days = implode(",", $request->day);
        //days = Mon,Tue,Wed,Thu,Fri,Sat
        //time = eg. 12:30 PM
        $forlike = "((schedules.day like '%" . 
                        str_replace(",", "%') or (schedules.day like '%", 
                        str_replace(' ', '', $days)) . "%'))";
        $validate = Schedule::whereRaw($forlike)
                        ->where('subject_code_id',$request->subject_code_id)
                        ->where('teacher_id',$request->tid)
                        ->where('room_id',$request->room_id)
                        ->where('start_time','<',strtotime($request->end_time))
                        ->where('end_time','>',strtotime($request->start_time))
                        ->where('school_year',$request->school_year)
                        // ->where('day',$request->day)
                        ->where('term',$request->term)
                        ->where('semester',$request->semester)
                        ->where('student_id',$request->student_id)
                        ->first();
        if(!empty($validate)){
                throw new \ErrorException('Record Exist');
        } else{
                $schedule->subject_code_id = $request->subject_code_id;
                $schedule->teacher_id = $request->tid;
                $schedule->room_id = $request->room_id;
                $schedule->start_time = $request->start_time;
                $schedule->end_time = $request->end_time;
                $schedule->school_year = $request->school_year;
                $schedule->semester = $request->semester;
                $schedule->term = $request->term;
                $schedule->day = $days;
                $schedule->student_id = $request->student_id;
                $schedule->save();
        }

前端

      updateSchedule() {
                let params = {day: this.day}
                axios.put('/updateSchedule/' + this.form.scid,{
                    tid: this.tid.id,
                    room_id:this.room_id.id,
                    start_time: this.form.start_time,
                    end_time: this.form.end_time,
                    day: this.day,
                    term: this.form.term,
                    semester: this.form.semester,
                    subject_code_id: this.sc_code.id,
                    school_year: this.form.school_year,
                    student_id: this.student_id.id

                })
                    .then(() => {
                        swal.fire("Record Updated!", "", "success");
                        $('#exampleModal').modal('hide');
                        $('#exampleModal').modal('close');
                        $(".modal-backdrop").remove();
                        this.getSchedulesPagination()
                    })
                    .catch((e) => {
                        console.log(e.status)
                        swal.fire("Record Exist", "", "warning");
                        $('#exampleModal').modal('hide');
                        $(".modal-backdrop").remove();
                        this.getSchedulesPagination()
                    })
            }

当我更新重复的时间表时得到了什么 l

标签: javascriptphpmysqllaravelvue.js

解决方案


也许您需要先使用 Carbon 解析时间\Carbon\Carbon::parse($request->end_time),然后使用 laravel whereTime 助手。

->whereTime('start_time','<',\Carbon\Carbon::parse($request->start_time))

推荐阅读