Моя проблема в том, что я заблудился относительно того, что делать при получении доступного номера между двумя датами, когда в одном бронировании могут быть номера нескольких номеров.
У меня 3 таблицы:
забронированный номер
create table reservedRoom (
bookingID int ,
roomID int NOT NULL,
n_person int,
)
bookingID roomID n_person
2 1 2
2 2 2
2 3 3
2 4 3
2 5 3
номер
create table room (
roomID int NOT NULL PRIMARY KEY,
descriptions int NOT NULL,
rate int,
category varchar(30),
)
roomID descriptions rate category
1 2 2000 standard
2 2 2000 standard
3 2 2000 standard
4 2 2000 standard
5 2 2000 standard
6 2 2000 standard
7 2 2000 standard
8 2 2000 standard
9 2 2500 quad
10 2 2500 quad
11 2 2500 quad
12 2 2500 quad
13 2 2500 quad
14 2 3000 family
15 2 3000 family
16 2 3000 family
17 2 3000 family
18 2 8000 King
19 2 8000 King
20 2 8000 King
Бронирование
create table bookings (
bookingID int NOT NULL PRIMARY KEY,
clientID int NOT NULL,
checkIndate DATETIME,
checkOutDate DATETIME,
roomsCount int,
numNights int,
bookExpire DATETIME,
)
bookingID clientID checkIndate checkOutDate roomsCount numNights bookExpire
1 1 2018-02-08 2018-02-09 3 2 2018-02-11
2 2 2018-02-08 2018-02-09 5 2 2018-02-11
3 3 2018-02-08 2018-02-09 3 2 2018-02-11
4 4 2018-02-08 2018-02-09 3 2 2018-02-11
5 5 2018-02-08 2018-02-09 3 2 2018-02-11
Я попробовал этот код, но я не знаю, что делать дальше.
$availableRooms = booking::where(function($query) use ($checkInDate_1, $checkOutDate_1)
{
$query->where(function($query) use ($checkInDate_1, $checkOutDate_1){
$query->whereDate('bookings.checkOutDate', '>=', $checkInDate_1);
$query->whereDate('bookings.checkOutDate', '<=', $checkOutDate_1);
});
})
->whereDate('bookings.bookExpire', '>',$checkOutDate_1)
->get();
Моя проблема заключается в том, как мне сгруппировать номера по bookingID и интегрировать эту группу в запрос, чтобы получить номера нарегистрация и проверка.
Желаемый результат на дату 2018-02-08 - 2018-02-09
standard room - 3 Rooms available
quad room - 5 rooms available
family room - 4 rooms available
king room - 3 rooms available