Laravel 4+ oferuje te metody:whereDay()
, whereMonth()
, whereYear()
(#3946
) i whereDate()
(#6879
).
Wykonują SQL DATE()
pracować dla Ciebie i zarządzać różnicami SQLite.
Twój wynik można osiągnąć w następujący sposób:
->whereDate('date', '<=', '2014-07-10')
Więcej przykładów znajdziesz w pierwszej wiadomości #3946 i ten artykuł Laravel Daily .
Aktualizacja: Chociaż powyższa metoda jest wygodna, jak zauważył Arth, jest nieefektywna w przypadku dużych zestawów danych, ponieważ DATE()
Funkcja SQL musi być zastosowana do każdego rekordu, odrzucając w ten sposób możliwy indeks.
Oto kilka sposobów na dokonanie porównania (ale przeczytaj uwagi poniżej):
->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)
Uwagi:
- 23:59:59 jest w porządku (na razie) ze względu na 1-sekundową precyzję, ale spójrz na ten artykuł:23:59:59 to nie koniec dnia. Nie, naprawdę!
- Pamiętaj o przypadku „data zero” („0000-00-00 00:00:00”). Chociaż tych „dat zerowych” należy unikać, są one źródłem wielu problemów. W razie potrzeby lepiej zmień pole na wartość null.