whereraw query optimizar not lentas consultas mysql date activerecord where laravel-5.1

mysql - query - where like laravel



Consigue solo los registros creados hoy en laravel. (6)

Puede usar whereRaw(''date(created_at) = curdate()'') si la zona horaria no es una preocupación o whereRaw(''date(created_at) = ?'', [Carbon::now()->format(''Ym-d'')] ) contrario.

Dado que el campo created_at es una marca de tiempo, debe obtener solo la parte de la fecha e ignorar la parte de la hora.

¿Cómo uso el campo created_at para obtener solo los registros que se crearon hoy y no otro día u hora?

Estaba pensando en un ->where(''created_at'', ''>='', Carbon::now()) Pero no estoy seguro de que funcione.


Si está utilizando Carbon (y debería, ¡es increíble!) Con Laravel, simplemente puede hacer lo siguiente:

->where(''created_at'', ''>='', Carbon::today())

Además de now() y today() , también puede usar yesterday() y tomorrow() y luego usar lo siguiente:

  • startOfDay() / endOfDay()
  • startOfWeek() / endOfWeek()
  • startOfMonth() / endOfMonth()
  • startOfYear() / endOfYear()
  • startOfDecade() / endOfDecade()
  • startOfCentury() / endOfCentury()

Utilice la función CURDATE predeterminada de Mysql para obtener todos los registros del día.

$records = DB::table(''users'')->select(DB::raw(''*'')) ->whereRaw(''Date(created_at) = CURDATE()'')->get(); dd($record);

Nota y actualización para 5.6

La diferencia entre Carbon::now vs Carbon::today is just time.

p.ej

Fecha impresa a través de Carbon::now se verá como algo:

2018-06-26 07:39:10.804786 UTC (+00:00)

Mientras que con Carbon::today :

2018-06-26 00:00:00.0 UTC (+00:00)

Para obtener los únicos registros creados hoy con now se pueden buscar como:

Post::whereDate(''created_at'', Carbon::now()->format(''m/d/Y''))->get();

mientras today con:

Post::whereDate(''created_at'', Carbon::today())->get();

ACTUALIZAR

A partir de la laravel 5.3, tenemos por defecto la cláusula whereDate / whereMonth / whereDay / whereYear

$users = User::whereDate(''created_at'', DB::raw(''CURDATE()''))->get();

O con fachada DB

$users = DB::table(''users'')->whereDate(''created_at'', DB::raw(''CURDATE()''))->get();

El uso de los anteriores enumerados donde las cláusulas

$users = User::whereMonth(''created_at'', date(''m''))->get(); //or you could also just use $carbon = /Carbon/Carbon::now(); $carbon->month; //select * from `users` where month(`created_at`) = "04" $users = User::whereDay(''created_at'', date(''d''))->get(); //or you could also just use $carbon = /Carbon/Carbon::now(); $carbon->day; //select * from `users` where day(`created_at`) = "03" $users = User::whereYear(''created_at'', date(''Y''))->get(); //or you could also just use $carbon = /Carbon/Carbon::now(); $carbon->year; //select * from `users` where year(`created_at`) = "2017"

Query Builder Docs


con carbono

return $model->where(''created_at'', ''>='', /Carbon::today()->toDateString());

sin carbono

return $model->where(''created_at'', ''>='', date(''Y-m-d'').'' 00:00:00'');


para los usuarios de Laravel 5.6, simplemente puede hacer

$posts = Post::whereDate(''created_at'', Carbon::today())->get();

Feliz codificacion


$today = Carbon/Carbon::now()->format(''Y-m-d'').''%''; ->where(''created_at'', ''like'', $today);

Espero que te ayude