Heim > Backend-Entwicklung > PHP-Tutorial > Wie kann ich mit Laravel Eloquent die neueste Zeile für jeden einzelnen Verkäufer in einer Tabelle abrufen?

Wie kann ich mit Laravel Eloquent die neueste Zeile für jeden einzelnen Verkäufer in einer Tabelle abrufen?

Linda Hamilton
Freigeben: 2024-10-25 14:57:02
Original
263 Leute haben es durchsucht

How can I retrieve the latest row for each unique seller in a table using Laravel Eloquent?

Abrufen der neuesten Zeilen mit Max Created_at unter Verwendung von Laravel Eloquent

In Laravel Eloquent kann das Abrufen der neuesten Zeilen für jedes eindeutige Feld erreicht werden durch ein umfassender Ansatz. In einer bestimmten Tabelle, die Verkäufe verfolgt, in der jeder Eintrag Felder wie „id“, „seller_id“, „amount“ und „created_at“ enthält, besteht das Ziel darin, die aktuellste Zeile für jede einzelne seller_id abzurufen.

Abrufen der neuesten Zeile Zeile für einen bestimmten Verkäufer

Um die neueste Zeile für einen bestimmten Verkäufer zu erhalten, bietet Laravel Eloquent eine einfache Methode:

<code class="php">$sales = Snapshot::where('seller_id', '=', 15)
    ->orderBy('created_at', 'DESC')
    ->first();</code>
Nach dem Login kopieren

Diese Abfrage wählt alle Datensätze aus der Snapshot-Tabelle aus, in der seller_id ist gleich 15, ordnet sie in absteigender Reihenfolge basierend auf „created_at“ und ruft die erste Zeile ab, wodurch effektiv der letzte Verkauf für diesen Verkäufer zurückgegeben wird.

Abrufen der neuesten Zeile für jeden Verkäufer

Die Ausweitung dieses Ansatzes, um die neueste Zeile für jeden einzelnen Verkäufer abzurufen, erfordert eine fortgeschrittenere Strategie. Die folgende SQL-Abfrage erledigt diese Aufgabe:

<code class="sql">select s.*
from snapshot s
left join snapshot s1 on s.seller_id = s1.seller_id
and s.created_at < s1.created_at
where s1.seller_id is null
Nach dem Login kopieren

In dieser Abfrage wählt die Unterabfrage s1 Datensätze basierend auf der Bedingung s.created_at < s1.created_at, wodurch sichergestellt wird, dass nur Datensätze einbezogen werden, bei denen nachfolgende Zeilen einen späteren Zeitstempel „created_at“ haben. Die äußere Abfrage wählt dann alle Zeilen aus den Haupttabellen aus, die keine passenden Zeilen in der Unterabfrage haben, und isoliert so effektiv die neuesten Datensätze für jede seller_id.

Implementierung der Abfrage in Laravel Eloquent

Um diese Abfrage mit Laravel Eloquent zu implementieren, kann die Abfrage-Builder-Methode verwendet werden:

<code class="php">DB::table('snapshot as s')
  ->select('s.*')
  ->leftJoin('snapshot as s1', function ($join) {
        $join->on('s.seller_id', '=', 's1.seller_id')
             ->whereRaw(DB::raw('s.created_at < s1.created_at'));
   })
  ->whereNull('s1.seller_id')
  ->get();</code>
Nach dem Login kopieren

Diese Abfrage repliziert die Funktionalität der SQL-Abfrage, indem sie eine Linksverknüpfung zwischen der Snapshot-Tabelle und einer Unterabfrage durchführt (s1), das spätere Zeilen für jede seller_id identifiziert. Die whereNull-Bedingung filtert Zeilen heraus, die nachfolgende Zeilen haben, sodass nur der neueste Datensatz für jede seller_id übrig bleibt. Die Ausführung dieser Abfrage gibt eine Sammlung der letzten Verkäufe für jeden einzelnen Verkäufer in der Tabelle zurück.

Das obige ist der detaillierte Inhalt vonWie kann ich mit Laravel Eloquent die neueste Zeile für jeden einzelnen Verkäufer in einer Tabelle abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage