sql >> Base de Datos >  >> RDS >> Mysql

Laravel Eloquent compara la fecha del campo de fecha y hora

Laravel 4+ te ofrece estos métodos:whereDay() , whereMonth() , whereYear() (#3946 ) y whereDate() (#6879 ).

Hacen el SQL DATE() trabaje para usted y administre las diferencias de SQLite.

Su resultado se puede lograr así:

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

Para obtener más ejemplos, consulte el primer mensaje de #3946 y este Artículo de Laravel Daily .


Actualización: Aunque el método anterior es conveniente, como señaló Arth, es ineficiente en grandes conjuntos de datos, porque DATE() Se debe aplicar la función SQL en cada registro, descartando así el posible índice.

Aquí hay algunas formas de hacer la comparación (pero lea las notas a continuación):

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

Notas:

  • 23:59:59 está bien (por ahora) debido a la precisión de 1 segundo, pero echa un vistazo a este artículo:23:59:59 no es el final del día. ¡No, de verdad!
  • Tenga en cuenta el caso de "fecha cero" ("0000-00-00 00:00:00"). Sin embargo, estas "fechas cero" deben evitarse, ya que son fuente de muchos problemas. Es mejor que el campo sea anulable si es necesario.