Laravel 4+ ви предлага тези методи:whereDay()
, whereMonth()
, whereYear()
(#3946
) и whereDate()
(#6879
).
Те изпълняват SQL DATE()
работи за вас и управлява разликите в SQLite.
Вашият резултат може да бъде постигнат по следния начин:
->whereDate('date', '<=', '2014-07-10')
За повече примери вижте първото съобщение на #3946 и тази статия в Laravel Daily .
Актуализация: Въпреки че горният метод е удобен, както отбелязва Арт, той е неефективен при големи набори от данни, тъй като DATE()
SQL функцията трябва да се приложи към всеки запис, като по този начин се отхвърля възможният индекс.
Ето няколко начина за сравнение (но моля, прочетете бележките по-долу):
->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)
Бележки:
- 23:59:59 е добре (засега) поради 1-секундната точност, но вижте тази статия:23:59:59 не е краят на деня. Не, наистина!
- Имайте предвид случая „нулева дата“ („0000-00-00 00:00:00“). Въпреки че тези „нулеви дати“ трябва да се избягват, те са източник на толкова много проблеми. По-добре направете полето с нула, ако е необходимо.