Eine VERKNÜPFUNG Mit Zusätzlichen Bedingungen Mithilfe von Query Builder oder Eloquent

Ich versuche, fügen Sie eine Bedingung mit einer JOIN-Abfrage mit Laravel Abfrage-generator.

<?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')
);

Ich weiß, dass ich verwenden können, Raw-Ausdrücke aber dann gibt es SQL-injection-Punkte. Ich habe versucht, die folgenden mit Query-Builder, aber die generierte Abfrage (und es ist offensichtlich, Abfrage-Ergebnisse) nicht, was ich beabsichtigte:

$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();

Dies ist die generierte Abfrage von 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

Wie Sie sehen können, die Ausgabe der Abfrage nicht mit der Struktur (vor allem unter JOIN-scope). Ist es möglich, zusätzliche Bedingungen BEITRETEN?

Wie kann ich die gleiche Abfrage mit Laravel ist der Abfrage-generator (wenn möglich) Ist es besser, Eloquenter, oder bleiben sollte, mit DB::select?

InformationsquelleAutor dede | 2013-05-31
Schreibe einen Kommentar