2016-04-17 7 views
0

Ich habe Abfrage zu schreiben, wo ich brauche Salons zu bekommen, wo keine Vorbehalte gibt es so ich dies schreibe:Laravel whereHas nicht zwischen oder nicht exsists nicht

Salon::whereHas('reservationsSalons', function($q) { 
    $q->whereNotBetween('start_time', [request()->start_time, request()->end_time]); 
}) 
->get(); 

Aber das Problem ist, ich bin nicht Salons bekommen wo gibt es keine Vorbehalte. Also brauche ich so etwas wie

->orwhereNotHas('reservationsSalons') 
+2

Es gibt eine Methode 'whereDoesntHave()', die Sie in einer oder Klausel verwenden können, siehe hier: https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Builder.html#method_whereDoesntHave –

Antwort

0

Die einfache Antwort auf Ihre Frage ist whereDoesntHave verwenden.

Die lange Antwort ist jedoch nicht nur Ihnen bekannt. Wir können Ihren Code nicht sehen, daher können wir nur spekulieren, was das eigentliche Problem ist. Ich glaube, Ihre Anfrage ist bereits korrekt, wenn Sie versuchen, Reservierungen zu erhalten, die nicht in der Eingabezeit enthalten sind.

Der richtige Weg, um das Problem zu finden, ist DB::getQueryLog() zu verwenden, um die von Laravel/Eloquent Builder generierte Abfrage zu überprüfen und sicherzustellen, dass es die richtige Abfrage ist.

Außerdem können Sie möglicherweise eine schnellere Abfrage mit einem Raw-Abfrage-Generator oder einer nativeren Abfrage erhalten.