2017-03-08 3 views
0

Ich brauche Ergebnisse aus einer DB von Daten geteilt zu bekommen wie heute, gestern, diese Woche, letzte Woche, usw.Erste bestimmte Zeiträume von Datenbank in Laravel

Ich kann dies leicht tun mit whereRaw und einigen SQL :

whereRaw('Date(created_at) = CURDATE()')->get(); 

Ich frage mich, ob es einen einfacheren, richtigen Weg gibt, dies mit Eloquent zu tun.

public function scopeYourQuery($query, $user) { 
    return $query->where('user_id', $user->id)->orderBy('created_at', 'desc')->first(); 
} 

Dies wird nur das erste Element einer absteigend geordnete Liste von created_at Datum pro Benutzer bestellt:

+0

Ihr Raw SQL filtert nicht nach Bereich. –

+0

@AlexBlex Dies war nur ein Beispiel, wie man heute kommt, offensichtlich wenn ich eine Reichweite bekommen will, werde ich es erweitern. – prgrm

+0

Wenn http://stackoverflow.com/questions/24824624/laravel-q-where-between-dates, http://stackoverflow.com/questions/33361628/laravel-eloquent-date-range, etc. nicht geben Sie ein Hinweis, beziehen Sie sich auf die Dokumente https://laravel.com/docs/5.4/queries#where-clauses? –

Antwort

1

Sie könnten einen Rahmen für eine bestimmte Klasse wie folgt erstellen.

Wenn Sie etwas wollten, das zwischen Datumsbereichen war? Sie müssen nur Ihr Datum passieren und es ein wenig mit einigen PHP erweitern, vielleicht so etwas wie dies funktionieren würde:

public function scopeSomeDateQuery($query, $fetch_date, $user) 
{ 
    //clone the users chosen month - so we can make the range until the following month 
    $also_fetch_date = clone $fetch_date; 
    $next_month = $also_fetch_date->addMonth(); 
    $next_month = $next_month->format('Y-m-d'); 
    $fetch_date = $fetch_date->format('Y-m-d'); 
    //return the query for the monthname 
    return $query->orderBy('created_date')->where('created_date', '>=', $fetch_date)->where('created_date', '<', $next_month)->where('user_id', $user->id); 
} 

Diese in einem monatlichen Bereich aussehen würde (pro Benutzer) eine geordnete Liste von Elementen mit einem created_date erhalten in diesem Bereich.

+0

Ich fragte, ob es einen beredten Weg gab um dies zu erreichen, aber da es scheint, gibt es keinen guten Anfang. Vielen Dank. – prgrm

+0

Ja, nicht, dass ich mir dessen bewusst bin - ich denke, du musst die Frage selbst mit deiner Eingabe beantworten. Wenn Sie einen besseren Weg finden - lassen Sie es mich wissen! Ich stehe oft auf ähnliche Anfragen! – Hanny

Verwandte Themen