Mysql
 sql >> база данни >  >> RDS >> Mysql

Laravel Eloquent сравнява датата от полето datetime

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“). Въпреки че тези „нулеви дати“ трябва да се избягват, те са източник на толкова много проблеми. По-добре направете полето с нула, ако е необходимо.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преобразуване на обект в низ в PHP

  2. Как да добавя индекси към MySQL таблици?

  3. Избор на записи по реда на родителския идентификатор

  4. ИЗПУСКАНЕ ТАБЛИЦА, АКО СЪЩЕСТВУВА в MySQL

  5. Недостатък на производителността на композитния първичен ключ в MySQL