2013-01-15 20 views
8

Voglio restituire tutte le righe nella tabella del mio database che sono un giorno o meno vecchie. Sto usando Laravel 4. Questo è quello che ho provato:Laravel/Eloquent e confronto date

$date = date('Y-m-d H:i:s'); 
return MainContact::where(DATEDIFF('timestamp', $date), '<=', 1)->get(); 

Questo non funziona. Ho letto la documentazione e non sembra che tu possa passare le funzioni di MySavel MySQL. timestamp è un campo datetime. Come posso confrontare queste date in Laravel 4?

risposta

9

La risposta che ha dato user1977808 non è buono perché MySQL non può usare un indice sulla colonna timestamp, dal momento che deve calcolare un output della funzione DATE_SUB per ogni riga. Evita queste domande, devono elaborare l'intero tavolo ogni volta!

Che ne dite di qualcosa di simile:

return MainContact::where('timestamp', '>=', time() - (24*60*60))->get(); 

ho messo il >= in là perché lei ha detto "un giorno o meno vecchi", quindi devono avere timestamp che è successivo di ieri.

+0

Sì, ho dovuto aggiustare il suo MySQL. – sehummel

+2

Ho fatto 'MainContact :: where ('timestamp', '>', DB :: raw ('NOW() - INTERVAL'. $ Interval. 'DAY') -> get();' e poi passato nell'intervallo – sehummel

+2

Puoi anche usare 'strtotime (" - 1 giorno ")', come questo: 'MainContact :: where ('timestamp', '>' strtotime (" - {$ interval} day ")) -> get(); ' –

0

si può anche fare una query RAW utilizzando:

$results = DB::query('query'); 

È solo non l'l'oggetto del modello di nuovo in risultati var

+0

Sì, questo è l'approccio su cui sto lavorando ora. – sehummel

+0

Speravo che ci fosse un modo migliore. – sehummel

2
return MainContact::where('timestamp', '>=', time() - (24*60*60))->get(); 
+0

Ho finito per fare qualcosa di molto simile. – sehummel

0

Si potrebbe anche usare whereDate(), whereDay(), whereMonth() e whereYear(). In questo caso, whereDate() potrebbe essere usato come tale, con funzioni di data semplici di carbonio:

return MainContact::whereDate('dateField', '<', Carbon::now()->subDay())->get();