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

Laravel Eloquent confronta la data dal campo datetime

Laravel 4+ ti offre questi metodi:whereDay() , whereMonth() , whereYear() (#3946 ) e whereDate() (#6879 ).

Fanno l'SQL DATE() lavora per te e gestisci le differenze di SQLite.

Il tuo risultato può essere raggiunto così:

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

Per altri esempi, vedere il primo messaggio di #3946 e questo articolo di Laravel Daily .


Aggiornamento: Sebbene il metodo sopra sia conveniente, come notato da Arth è inefficiente su set di dati di grandi dimensioni, perché DATE() La funzione SQL deve essere applicata su ogni record, scartando così l'eventuale indice.

Ecco alcuni modi per fare il confronto (ma per favore leggi le note sotto):

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

Note:

  • 23:59:59 va bene (per ora) grazie alla precisione di 1 secondo, ma dai un'occhiata a questo articolo:23:59:59 non è la fine della giornata. No, davvero!
  • Tieni presente il caso "data zero" ("0000-00-00 00:00:00"). Tuttavia, queste "date zero" dovrebbero essere evitate, sono fonte di così tanti problemi. È meglio rendere il campo annullabile se necessario.