我正在构建一个 Laravel 应用程序,在 Controller 中我想预订一个有一定时间间隔的房间,如果有人已经在该时间预订了该房间,它将禁止用户在该时间间隔内预订该房间。我该如何解决这个问题?
我在 Controller 中编写了一个查询来检查时间范围,但它无法正常工作。
Eg: if a user want to book a room from 12:00 to 12:30, but someone already has booked that room from 12:15 to 12:45, controller won't let book that room.
这是我的 Controller :
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 !!
}
希望这有帮助。
关于php - Laravel 中如何避免时间重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37109138/