Heim > Backend-Entwicklung > PHP-Tutorial > Wie rufe ich mit Laravel Eloquent die neuesten Datensätze für jeden eindeutigen Wert in einer Spalte ab?

Wie rufe ich mit Laravel Eloquent die neuesten Datensätze für jeden eindeutigen Wert in einer Spalte ab?

Susan Sarandon
Freigeben: 2024-10-26 12:55:02
Original
798 Leute haben es durchsucht

How to Retrieve the Latest Records for Each Unique Value in a Column using Laravel Eloquent?

So erhalten Sie alle Zeilen mit Max Created_at in Laravel Eloquent

Im Eloquent ORM von Laravel können Sie auf Szenarien stoßen, in denen Sie die neuesten Zeilen für jeden einzelnen Wert abrufen müssen in einer bestimmten Spalte. Dies kann durch eine Kombination aus Unterabfragen und Aggregationsfunktionen erreicht werden.

Stellen Sie sich ein Szenario vor, in dem Sie eine Datenbanktabelle haben, die die folgenden Spalten enthält:

id  seller_id   amount   created_at
Nach dem Login kopieren

Angenommen, Sie möchten die aktuellste Version erhalten Datensatz für jede eindeutige seller_id. So können Sie dies mit einer unformatierten SQL-Abfrage erreichen:

<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 verwenden wir einen Left-Join, um jeden Datensatz in der Snapshot-Tabelle (Alias ​​s) mit allen anderen Datensätzen zu vergleichen, die dasselbe haben verkäufer_id. Anschließend verwenden wir die AND-Bedingung, um Datensätze herauszufiltern, bei denen s.created_at kleiner als s1.created_at ist. Schließlich fügen wir eine WHERE-Klausel ein, um alle Datensätze mit einer passenden seller_id in der rechten Tabelle (s1) auszuschließen und so effektiv den neuesten Datensatz für jede seller_id zu isolieren.

Um das gleiche Ergebnis mit dem Laravel-Abfrage-Builder zu erzielen, müssen Sie kann den folgenden Code ausführen:

<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

Dieser Abfrage-Builder-Ansatz spiegelt die Logik der Roh-SQL-Abfrage wider und kapselt sie in die fließende Oberfläche von Laravel. Es gibt eine Sammlung der neuesten Datensätze für jede einzelne in der Snapshot-Tabelle vorhandene Verkäufer-ID zurück.

Das obige ist der detaillierte Inhalt vonWie rufe ich mit Laravel Eloquent die neuesten Datensätze für jeden eindeutigen Wert in einer Spalte ab?. 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