Tôi đang cố gắng thêm một điều kiện bằng cách sử dụng truy vấn JOIN với Bộ tạo truy vấn Laravel.
<?php
$results = DB::select('
SELECT DISTINCT
*
FROM
rooms
LEFT JOIN bookings
ON rooms.id = bookings.room_type_id
AND ( bookings.arrival between ? and ?
OR bookings.departure between ? and ? )
WHERE
bookings.room_type_id IS NULL
LIMIT 20',
array('2012-05-01', '2012-05-10', '2012-05-01', '2012-05-10')
);
Tôi biết tôi có thể sử dụng Biểu thức thô nhưng sau đó sẽ có các điểm chèn SQL. Tôi đã thử cách sau với Trình tạo truy vấn nhưng truy vấn được tạo (và rõ ràng là kết quả truy vấn) không như tôi dự định:
$results = DB::table('rooms')
->distinct()
->leftJoin('bookings', function ($join) {
$join->on('rooms.id', '=', 'bookings.room_type_id');
})
->whereBetween('arrival', array('2012-05-01', '2012-05-10'))
->whereBetween('departure', array('2012-05-01', '2012-05-10'))
->where('bookings.room_type_id', '=', null)
->get();
Đây là truy vấn được tạo bởi Laravel:
select distinct * from `room_type_info`
left join `bookings`
on `room_type_info`.`id` = `bookings`.`room_type_id`
where `arrival` between ? and ?
and `departure` between ? and ?
and `bookings`.`room_type_id` is null
Như bạn có thể thấy, đầu ra truy vấn không có cấu trúc (đặc biệt là trong phạm vi JOIN). Có thể thêm các điều kiện bổ sung theo THAM GIA không?
Làm cách nào để tôi có thể tạo cùng một truy vấn bằng cách sử dụng Trình tạo truy vấn của Laravel (nếu có thể) Sử dụng Eloquent sẽ tốt hơn hay nên ở lại với DB :: select?
and arrival >= ? and arrival <= ? and departure >= ? and departure <= ?
thay thếAND ( r.arrival between ? and ? OR r.departure between ? and ? )
(vui lòng lưu ýOR
điều khoản). Điều này thêm các hàng bổ sung để dẫn đến kết quả không nên có ở đó. Tôi đoán không thể tạo tất cả các loại điều kiện tham gia bằng QB.