2013-01-15 29 views
8

Ich möchte alle Zeilen in meiner Datenbanktabelle, die ein Tag oder weniger alt sind, zurückgeben. Ich benutze Laravel 4. Dies ist, was ich versucht habe:Laravel/Eloquent und Vergleichen von Daten

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

Dies funktioniert nicht. Ich lese die Dokumentation und es scheint nicht so, als ob Sie Laravel MySQL-Funktionen übergeben können. timestamp ist ein Datetime-Feld. Wie kann ich diese Daten in Laravel 4 vergleichen?

Antwort

9

Die Antwort, die user1977808 gab dir nicht Gut, weil MySQL keinen Index für die timestamp-Spalte verwenden kann, da für jede Zeile eine Ausgabe der Funktion DATE_SUB berechnet werden muss. Vermeiden Sie solche Abfragen, sie müssen die gesamte Tabelle jedes Mal bearbeiten!

Wie wäre es etwa so:

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

habe ich die >= dort, weil man „einen Tag oder weniger alt“, sagte, sie müssen also Zeitstempel haben, die später als gestern ist.

+0

Ja, ich musste sein MySQL anpassen. – sehummel

+2

Ich habe 'MainContact :: wo ('Zeitstempel', '>', DB :: roh ('JETZT() - INTERVALL'. $ Intervall. 'DAY') -> get();' und dann in der Pause bestanden Ich wollte. – sehummel

+2

Sie können auch 'strtotime (" - 1 Tag ")', wie folgt verwenden: 'MainContact :: wo ('timestamp', '>' strtotime (" - {$ interval} Tag ")) -> get(); ' –

0

können Sie tun auch eine rohe Abfrage mithilfe:

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

Sie tun nicht nur das das Modellobjekt zurück in die Ergebnisse var

+0

Ja, das ist der Ansatz, den ich auf jetzt arbeitete. – sehummel

+0

Ich hatte gehofft, dass es einen besseren Weg gab. – sehummel

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

Ich landete etwas sehr ähnliches. – sehummel

0

Sie auch whereDate() nutzen könnten, whereDay(), whereMonth() und whereYear(). In diesem Fall wurde whereDate() könnte als solche mit Carbon einfachen Datumsfunktionen verwendet:

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