Ich habe einen Tisch wie diesen:
table
- field1: tinyint
- field2: varchar (nullable)
- datefield: timestamp (nullable)
Jetzt möchte ich alle Einträge erhalten, bei denen Feld1 1, Feld2 null und Datumsfeld kleiner als X oder null ist. Ich habe schon so etwas ausprobiert:
$query = Model::where('field1', 1)
->whereNull('field2')
->where('datefield', '<', $date)
->orWhereNull('datefield');
aber das funktioniert nicht. Ich bekomme immer jeden Eintrag, bei dem das Datumsfeld null ist. Es spielt keine Rolle, was die anderen Felder sind. Ich habe auch versucht, es in zwei Abfragen aufzuteilen: Zuerst jede Zeile abrufen, in der das Datumsfeld kleiner als X oder null ist, und dann (basierend darauf) jedes Feld abrufen, in dem Feld1 1 und Feld2 null ist.
Das Ergebnis war das gleiche. Irgendeine Idee, wie das geht?
Sie können zwei Abfragen zusammenführen:
quelle
Mit coalesce () wird null in 0 konvertiert:
$query = Model::where('field1', 1) ->whereNull('field2') ->where(DB::raw('COALESCE(datefield_at,0)'), '<', $date) ;
quelle