Heim  >  Artikel  >  Datenbank  >  Wie gruppiere ich Laravel Eloquent-Ergebnisse nach Tagen, wenn die Zeitstempel variieren?

Wie gruppiere ich Laravel Eloquent-Ergebnisse nach Tagen, wenn die Zeitstempel variieren?

DDD
DDDOriginal
2024-10-27 07:46:02416Durchsuche

How do I group Laravel Eloquent results by days when timestamps vary?

Laravel Eloquent-Ergebnisse nach Tagen gruppieren

In Laravel kann es beim Abfragen einer Datenbank erforderlich sein, Ergebnisse nach Tagen statt nach Zeitstempeln zu gruppieren. Hier ist eine ausführliche Frage und Antwort zu diesem speziellen Szenario:

Frage:

Ich habe eine Tabelle mit dem Namen page_views, in der Aufzeichnungen von Seitenbesuchen zusammen mit Zeitstempeln, Benutzer-IP-Adressen und Seiten-IDs gespeichert werden . Obwohl die Methode „groupBy“ verwendet wird, gruppieren Abfragen Daten aufgrund von Unterschieden in Sekunden innerhalb der Zeitstempel nicht korrekt nach Tagen.

Ich möchte Ergebnisse basierend auf Aufrufen pro Tag abrufen, die wie folgt aussehen sollten:

  date          views
  ====          =====
10-11-2013       15
10-12 2013       45
  ...            ...

Kann jemand Erkenntnisse oder Lösungen liefern?

Antwort:

Um Ergebnisse effektiv nach Tagen zu gruppieren, schlägt die Antwort vor, die DATE()-Funktion von MySQL zu nutzen, die den Datumsteil aus einer DateTime extrahiert value:

DB::table('page_views')
      ->select(DB::raw('DATE(created_at) as date'), DB::raw('count(*) as views'))
      ->groupBy('date')
      ->get();

Dieser Rohabfrageansatz weicht jedoch von der Abfrage-Builder-Syntax von Eloquent ab. Für eine eloquentere Lösung sieht die Antwort wie folgt aus:

$visitorTraffic = PageView::where('created_at', '>=', \Carbon\Carbon::now->subMonth())
                            ->groupBy('date')
                            ->orderBy('date', 'DESC')
                            ->get(array(
                                DB::raw('Date(created_at) as date'),
                                DB::raw('COUNT(*) as "views"')
                            ));

Diese Abfrage verwendet Carbon-Daten in der anfänglichen where-Klausel zum Vergleich und wendet entsprechende DB-Rohausdrücke innerhalb der get-Methode an, um beide Daten abzurufen und Anzahl der Aufrufe.

Das obige ist der detaillierte Inhalt vonWie gruppiere ich Laravel Eloquent-Ergebnisse nach Tagen, wenn die Zeitstempel variieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn