Laravel 4+ bietet Ihnen diese Methoden:whereDay()
, whereMonth()
, whereYear()
(#3946
) und whereDate()
(#6879
).
Sie machen das SQL DATE()
für Sie arbeiten und die Unterschiede von SQLite verwalten.
Ihr Ergebnis kann so erreicht werden:
->whereDate('date', '<=', '2014-07-10')
Weitere Beispiele finden Sie in der ersten Nachricht von #3946 und dieser Laravel Daily Artikel .
Aktualisierung: Obwohl die obige Methode praktisch ist, ist sie, wie von Arth angemerkt, bei großen Datensätzen ineffizient, da das DATE()
Die SQL-Funktion muss auf jeden Datensatz angewendet werden, wodurch der mögliche Index verworfen wird.
Hier sind einige Möglichkeiten, den Vergleich durchzuführen (bitte beachten Sie jedoch die folgenden Hinweise):
->where('date', '<=', '2014-07-10 23:59:59')
->where('date', '<', '2014-07-11')
// '2014-07-11'
$dayAfter = (new DateTime('2014-07-10'))->modify('+1 day')->format('Y-m-d');
->where('date', '<', $dayAfter)
Hinweise:
- 23:59:59 ist wegen der 1-Sekunden-Präzision (vorerst) in Ordnung, aber schauen Sie sich diesen Artikel an:23:59:59 ist nicht das Ende des Tages. Nein, wirklich!
- Denken Sie an den Fall "Nulldatum" ("0000-00-00 00:00:00"). Diese "Nulldaten" sollten jedoch vermieden werden, sie sind die Quelle so vieler Probleme. Machen Sie das Feld bei Bedarf besser nullable.