【问题标题】:Hotel Room Booking problem Query in LaravelLaravel中酒店订房问题查询
【发布时间】:2020-10-13 14:07:00
【问题描述】:

我遇到了在不同日期为同一房间预订酒店房间的问题。 假设,

id----room_id------checkindate---------checkoudate
1-----1001--------12-10-2020-----------15-10-2020
2-----1001--------16-10-2020-----------30-10-2020

订房

            $room=Room::find($id);
            // $booking=Booking::where('room_id',$room->id)->get();
            $booking=DB::table('rooms')
            ->leftjoin('bookings','bookings.room_id','=','rooms.id')
            ->where([['bookings.check_in_date', '<', $request->c_in_date],['bookings.check_out_date', '<', $request->c_out_date]])
            ->orwhere([['bookings.check_in_date', '>', $request->c_in_date],['bookings.check_out_date', '>', $request->c_out_date]])
            ->get();

            if($booking){
               return redirect()->route('room.book_now',$id)->with('warning','Room already Booked');
            }

现在的问题是,如果有人在 17-10-2020--20-10-2020 这个日期预订房间,它将被预订。但从逻辑上讲,它不能。如果在此期间已经预订了同一个房间,则会显示消息:“房间已预订”,否则进行下一次关闭。

我该如何解决这个问题? laravel 中的实际 SQL 查询是什么?

提前致谢!

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    您不需要执行连接查询,因为您已经拥有 room_id,它也存储在 bookings 表中。

    我假设签入和签出在您的数据库中存储为日期,因此我们需要在进行任何比较之前先将其转换为日期。

    我们也不需要检查房间的退房日期。如果房间在用户给定的日期范围内登记入住,则意味着房间不可用。所以只需检查入住日期。

    $check_in = date($request->c_in_date);
    $check_out = date($request->c_out_date);
    $booking=DB::table('bookings')
                ->where('room_id',$id)
                ->whereBetween('check_in_date',[$check_in,$check_out])
                ->get();
    

    【讨论】:

      猜你喜欢
      • 2017-08-27
      • 2011-08-18
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多