Mysql
 sql >> Base de données >  >> RDS >> Mysql

Laravel Eloquent compare la date du champ datetime

Laravel 4+ vous propose ces méthodes :whereDay() , whereMonth() , whereYear() (#3946 ) et whereDate() (#6879 ).

Ils font le SQL DATE() travailler pour vous et gérer les différences de SQLite.

Votre résultat peut être atteint comme suit :

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

Pour plus d'exemples, voir le premier message de #3946 et cet article du Laravel Daily .


Mise à jour : Bien que la méthode ci-dessus soit pratique, comme l'a noté Arth, elle est inefficace sur les grands ensembles de données, car le DATE() La fonction SQL doit être appliquée sur chaque enregistrement, supprimant ainsi l'index éventuel.

Voici quelques façons de faire la comparaison (mais veuillez lire les notes ci-dessous) :

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

Remarques :

  • 23:59:59 est correct (pour l'instant) en raison de la précision d'une seconde, mais jetez un œil à cet article :23:59:59 n'est pas la fin de la journée. Non, vraiment !
  • Gardez à l'esprit le cas de la "date zéro" ("0000-00-00 00:00:00"). Bien que ces "dates zéro" soient à proscrire, elles sont source de tant de problèmes. Mieux vaut rendre le champ nullable si nécessaire.