2015-10-20 30 views
12

Come utilizzare il campo created_at per ottenere solo i record che sono stati creati oggi e nessun altro giorno o ora?Ottieni solo record creati oggi in laravel

Stavo pensando a un ->where('created_at', '>=', Carbon::now()) Ma non sono sicuro che funzionerebbe.

risposta

28

Utilizzare la funzione predefinita per ottenere tutti i record del giorno.

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

UPDATE

Al laravel 5.3, abbiamo predefinita in cui clausola whereDate/whereMonth/whereDay/whereYear

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

O con DB facciata

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

utilizzo del sopra l Isted dove clausole

$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

+0

Questo ottiene ieri e oggi più domani. – TheWebs

+0

@KyleAdams Ho modificato il mio codice e ho provato che non ha errori ora ... –

+0

@BasheerAhmed Il tuo codice modificato è lo stesso della mia risposta. ;) –

5

È possibile utilizzare whereRaw('date(created_at) = curdate()') se il fuso orario non è un problema o whereRaw('date(created_at) = ?', [Carbon::now()->format('Y-m-d')]) in caso contrario.

Poiché il campo created_at è un timestamp, è necessario ottenere solo la parte relativa alla data e ignorare la parte relativa all'ora.

+0

'Argomento 2 passato per illuminare \ Database \ Query \ Builder :: whereRaw() deve essere del tipo array, stringa data' – TheWebs

+0

Oops.Ho modificato la mia risposta. –

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

speranza che vi aiuterà a

7

con il carbonio:

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

senza carbonio:

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

Ho usato la seconda opzione per creare un ambito per tutti gli appuntamenti che si verificano oggi. –

17

Se si utilizza di carbonio (e si dovrebbe, è impressionante!) Con laravel, si può semplicemente effettuare le seguenti operazioni:

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

Oltre now() e today(), è anche possibile utilizzare yesterday() e tomorrow() e quindi utilizzare il seguente:

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