2017-01-23 2 views
1

Für eine Suchanfrage ich habe folgendes:Eloquent whereRaw Anweisung und orWhereRaw ist NULL

DB::whereRaw('column = ?', 'foo')->orWhereRaw('column IS NULL')->get(); 

Hinzufügen der orWhereRaw Anweisung gibt mir weniger Ergebnisse als nur die whereRaw. Irgendwie scheint es die erste zu ignorieren, wenn die andere hinzugefügt wird. Es ist in der SQL-Anweisung enthalten. Gibt es eine andere Möglichkeit für einen String und Nullwert zu vergleichen?

Ich habe versucht, auch die folgende, wie unten vorgeschlagen:

return self::select('id') 
    ->where('current_state', 'unavailable') 
    ->orWhereNull('current_state') 
    ->get(); 

Wenn ich den Auftrag (die whereNull ersten und die zweiten wo) das gibt mir unterschiedliche Ergebnisse auch ändern. Es scheint, als ob die inklusive Abfrage in Übereinstimmung mit der where-Klausel nicht korrekt funktioniert. Wenn ich reguläre where-Klauseln verwende, habe ich keine Probleme.

Laufen SELECT * FROM events WHERE current_state='unavailable' OR current_state IS NULL; produziert das richtige Ergebnis für mich.

Antwort

2

Verwenden Sie whereRaw nicht zum Überprüfen auf Null. Sie können dies stattdessen verwenden:

->orWhereNull('column') 

Den richtigen Weg, um die ersten zu tun, wo, wenn Sie etwas extra wie eine MySQL-Funktion tun, nur ist die Säule wie folgt zusammen weitergeben müssen:

where('column', '=', 'foo') 

Sie können die Equals tatsächlich eliminieren, da sie standardmäßig auf diesen Wert gesetzt wird. So Ihre Frage wäre:

DB::table('table')->where('column', 'foo')->orWhereNull('column')->get(); 
+0

ich vereinbart, dass Sie verwenden sollten 'whereNull' und' orWhereNull' aber Ihre erste 'whereRaw' sollte wohl sein' where' als 'whereRaw' nicht akzeptiert, dass die Unterzeichnung – Chris

+0

Sie Stimmt, das war ein Tippfehler. Ich werde das reparieren. – aynber

+0

Das gibt mir immer noch weniger Ergebnisse, wenn ich die inclusive orWhereNull hinzufüge. return self :: select ('angel_id') -> where ('aktueller_Status', 'nicht verfügbar') -> orWhereNull ('current_state') -> get(); Wenn ich die Reihenfolge ändere (whereNull zuerst und wo wo), gibt mir das auch andere Ergebnisse. – Diederik