如何避免在laravel中时间重叠

时间:2016-05-09 06:33:10

标签: php mysql sql laravel laravel-5

我正在构建一个laravel应用程序,在一个控制器中,我想预订一个有一些时间间隔的房间,如果有人已经预订那个房间,那么它将禁止用户在该时间间隔内预订该房间。我该如何解决这个问题?

我在我的控制器中写了一个查询,用于检查时间范围但是它无法正常工作。

  

例如:如果用户想要从12:00到12:30预订房间,但有人   已经从12:15到12:45预订了那个房间,控制器不会让   预订那个房间。

这是我的控制器:

 public function postAllocateRoom(Request $request)
    {

            $classRoom = new ClassRoom();  

            $classRoom->department_id=$request->Input(['department_id']);     
            $classRoom->room_id=$request->Input(['room_id']); 
            $classRoom->course_id=$request->Input(['course_id']); 
            $classRoom->day_id=$request->Input(['day_id']); 
            $classRoom->start=$request->Input(['start']); 
            $classRoom->end=$request->Input(['end']);  
            $startTime = Carbon::parse($request->input('start'));
            $endTime = Carbon::parse($request->input('end'));

          $room=DB::select('SELECT allocate_rooms.id 
                FROM allocate_rooms
WHERE "' . $startTime . '" BETWEEN allocate_rooms.start AND allocate_rooms.end AND
     "' . $endTime . '" BETWEEN allocate_rooms.start AND allocate_rooms.end');

            $messages ="Class Room Already Taken";
            if ($room) {
             return redirect('allocateRoomPage');
                    }
            else { 
                 $classRoom->save();            
            return redirect('allocateRoomPage');  
            }                   
    }

1 个答案:

答案 0 :(得分:1)

以下逻辑检查预订时间间隔是否与当前分配的房间的时间间隔发生冲突。它只是逻辑,你可能需要修改为正确。

if (($booking_start_time < $allocated_room_start_time && $booking_end_time < $allocated_room_start_time) || ($booking_start_time > $allocated_room_end_time && $booking_end_time > $allocated_room_end_time)) {
    // No time clash
}else{
   // Time clashed !!
}

希望得到这个帮助。