Laravel 4+ biedt u deze methoden:whereDay()
, whereMonth()
, whereYear()
(#3946
) en whereDate()
(#6879
).
Ze doen de SQL DATE()
voor u werken en de verschillen van SQLite beheren.
Uw resultaat kan als volgt worden bereikt:
->whereDate('date', '<=', '2014-07-10')
Zie voor meer voorbeelden het eerste bericht van #3946 en dit Laravel Daily-artikel .
Bijwerken: Hoewel de bovenstaande methode handig is, zoals opgemerkt door Arth, is deze inefficiënt voor grote datasets, omdat de DATE()
De SQL-functie moet op elk record worden toegepast, waardoor de mogelijke index wordt weggegooid.
Hier zijn enkele manieren om de vergelijking te maken (maar lees de opmerkingen hieronder):
->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)
Opmerkingen:
- 23:59:59 is oké (voorlopig) vanwege de precisie van 1 seconde, maar bekijk dit artikel eens:23:59:59 is niet het einde van de dag. Nee, echt waar!
- Houd rekening met het geval 'nul datum' ("0000-00-00 00:00:00"). Hoewel deze "nuldatums" vermeden moeten worden, zijn ze de bron van zoveel problemen. Maak het veld indien nodig beter nullable.