Laravel 4+ erbjuder dig dessa metoder:whereDay()
, whereMonth()
, whereYear()
(#3946
) och whereDate()
(#6879
).
De gör SQL DATE()
arbeta för dig och hantera skillnaderna i SQLite.
Ditt resultat kan uppnås så här:
->whereDate('date', '<=', '2014-07-10')
För fler exempel, se första meddelandet av #3946 och den här Laravel Daily-artikeln .
Uppdatering: Även om metoden ovan är bekväm, är den, som noterats av Arth, ineffektiv på stora datamängder, eftersom DATE()
SQL-funktion måste appliceras på varje post, vilket förkastar det möjliga indexet.
Här är några sätt att göra jämförelsen (men läs anteckningarna nedan):
->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)
Anmärkningar:
- 23:59:59 är okej (för nu) på grund av 1-sekunds precision, men ta en titt på den här artikeln:23:59:59 är inte slutet på dagen. Nej, verkligen!
- Tänk på fallet "noll datum" ("0000-00-00 00:00:00"). Även om dessa "nolldatum" bör undvikas, är de källan till så många problem. Bättre att göra fältet nullbart om det behövs.