Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Laravel Eloquent porównuje datę z polem datetime

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL GROUP BY z preferencjami

  2. SQL_CALC_FOUND_ROWS / FOUND_ROWS() nie działa w PHP

  3. Sprawdzanie, czy wynik jest pusty (PHP, PDO i MySQL)

  4. Widok tabeli krzyżowej w MySQL?

  5. FindByUUID() przy użyciu repozytorium JPA Spring Data