Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Laravel Eloquent compara a data do campo datetime


O Laravel 4+ oferece estes métodos:whereDay() , whereMonth() , whereYear() (#3946 ) e whereDate() (#6879 ).

Eles fazem o SQL DATE() trabalhe para você e gerencie as diferenças do SQLite.

Seu resultado pode ser alcançado assim:
->whereDate('date', '<=', '2014-07-10')

Para mais exemplos, veja a primeira mensagem de #3946 e este artigo Laravel Daily .


Atualização: Embora o método acima seja conveniente, como observado por Arth, ele é ineficiente em grandes conjuntos de dados, porque o DATE() A função SQL deve ser aplicada em cada registro, descartando assim o possível índice.

Aqui estão algumas maneiras de fazer a comparação (mas leia as notas abaixo):
->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á bom (por enquanto) por causa da precisão de 1 segundo, mas dê uma olhada neste artigo:23:59:59 não é o fim do dia. Não, sério!
  • Lembre-se do caso "data zero" ("0000-00-00 00:00:00"). No entanto, essas "datas zero" devem ser evitadas, pois são fonte de muitos problemas. Melhor tornar o campo anulável, se necessário.