Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Laravel Eloquent vergleicht das Datum mit dem Datetime-Feld

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.