sql >> Database teknologi >  >> RDS >> Mysql

Laravel Eloquent sammenligne dato fra datetime felt

Laravel 4+ tilbyder dig disse metoder:whereDay() , whereMonth() , whereYear() (#3946 ) og whereDate() (#6879 ).

De udfører SQL DATE() arbejde for dig, og administrer forskellene i SQLite.

Dit resultat kan opnås således:

->whereDate('date', '<=', '2014-07-10')

For flere eksempler, se den første besked fra #3946 og denne Laravel Daily-artikel .


Opdatering: Selvom ovenstående metode er praktisk, som bemærket af Arth, er den ineffektiv på store datasæt, fordi DATE() SQL-funktion skal anvendes på hver post og dermed kassere det mulige indeks.

Her er nogle måder at foretage sammenligningen på (men læs venligst noterne nedenfor):

->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)

Bemærkninger:

  • 23:59:59 er okay (for nu) på grund af 1-sekunds præcision, men kig på denne artikel:23:59:59 er ikke slutningen på dagen. Nej, virkelig!
  • Husk på tilfældet "nul dato" ("0000-00-00 00:00:00"). Selvom disse "nul-datoer" bør undgås, er de kilde til så mange problemer. Gør hellere feltet nullbart, hvis det er nødvendigt.


  1. SQL Server 2017 Management Tools

  2. C++ / mysql Connector - udefineret reference til get_driver_instance - har allerede prøvet de nemme ting

  3. Brug af elasticsearch-river-mysql til at streame data fra MySQL-database til Elasticsearch

  4. Bruger Oracle kortslutningsevaluering?