Я пытаюсь добавить условие, используя запрос JOIN с Laravel Query Builder.
<?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')
);
Я знаю, что могу использовать необработанные выражения, но тогда будут точки внедрения SQL. Я попробовал следующее с Query Builder, но сгенерированный запрос (и, очевидно, результаты запроса) не то, что я хотел:
$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();
Это сгенерированный запрос от 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
Как видите, выходные данные запроса не имеют структуры (особенно в области JOIN). Можно ли добавить дополнительные условия в JOIN?
Как я могу построить тот же запрос, используя Laravel Query Builder (если это возможно). Лучше использовать Eloquent или оставить с DB :: select?