我正在构建一个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');
}
}
以下逻辑检查预订时间间隔是否与当前分配房间的时间间隔冲突。这只是逻辑,您可能需要适当修改。
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 !!
}
希望得到帮助。