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>
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
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>
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!