Laravel: Wie man die letzten N Einträge von DB bekommt

Lesezeit: 3 Minuten

Benutzer-Avatar
Jakob Kohout

Ich habe eine Tabelle mit Hunden in meiner Datenbank und möchte sie abrufen N latest added dogs.

Der einzige Weg, den ich gefunden habe, ist so etwas:

Dogs:all()->where(time, <=, another_time);

Gibt es eine andere Möglichkeit, wie man es macht? Zum Beispiel so etwas Dogs:latest(5);

Vielen Dank für jede Hilfe 🙂

  • Eine Kombination der orderBy() und limit() Methoden; obwohl du es auch hast latest() als Alternative zu orderBy()

    – Markus Bäcker

    21. Juli 2014 um 8:51 Uhr


  • Google ist dein Freund.

    – Vucko

    21. Juli 2014 um 8:54 Uhr

Benutzer-Avatar
Das Alpha

Sie können so etwas versuchen:

$dogs = Dogs::orderBy('id', 'desc')->take(5)->get();

Verwenden orderBy mit Descending bestellen und das erste nehmen n Anzahl von Datensätzen.

Update (seit dem latest Methode wurde hinzugefügt):

$dogs = Dogs::latest()->take(5)->get();

  • Was passiert, wenn es in diesem Fall nur 3 Datensätze gibt?

    – f7n

    3. Februar 2017 um 11:33 Uhr

  • Du bekommst drei 🙂

    – Das Alpha

    3. Februar 2017 um 12:21 Uhr

  • Dadurch wird die Reihenfolge Ihrer Artikel umgekehrt. Sie müssen sie in Ihrer Anwendung neu anordnen. Wenn Sie also versuchen, die letzten 5 Beiträge nach Datum sortiert zu laden, vergessen Sie nicht, sie auf Sammlungsebene neu zu sortieren.

    – Wahre Geschichte

    12. August 2019 um 13:54 Uhr

  • @TheAlpha Ich möchte von desc abrufen, aber ich möchte die letzten 10000 Datensätze überspringen. Der von mir gewünschte Datensatz ist in den letzten 20000 enthalten, aber sicherlich nicht in den neuesten 10000. Irgendwelche Gedanken?

    – gowlemn

    15. August um 19:49 Uhr

  • @gowlemn, versuche es Dogs::latest()->skip(10000)->take(10000)->get(); .

    – Das Alpha

    15. August um 21:19 Uhr

Meine Lösung für Sauberkeit ist:

Dogs::latest()->take(5)->get();

Es ist dasselbe wie bei anderen Antworten, nur mit integrierten Methoden zur Handhabung gängiger Praktiken.

  • Dies funktioniert auch mit UUIDs, ist also allgemeiner. Es funktioniert jedoch nicht mit Tabellen, die keine Zeitstempel haben.

    – iWORT

    16. September 2019 um 15:57 Uhr

Benutzer-Avatar
Lukas C.

Dogs::orderBy('created_at','desc')->take(5)->get();

Sie können eine negative Ganzzahl n übergeben, um die letzten n Elemente zu übernehmen.

Dogs::all()->take(-5)

Das ist gut, weil Sie orderBy nicht verwenden, was schlecht ist, wenn Sie eine große Tabelle haben.

Du kannst es auch so versuchen:

$recentPost = Article::orderBy('id', 'desc')->limit(5)->get();

Es funktioniert gut für mich in Laravel 5.6

  • Ja, Methode take und limit ist ähnlich. Der Elternteil ist limitund take ist nur ein Pseudonym. Sie können die Datei Builder.php überprüfen

    – ibnɘꟻ

    12. September 2018 um 13:12 Uhr

Benutzer-Avatar
Hacker-Neuling

Ich benutze es so, da ich es sauberer finde:

$covidUpdate = COVIDUpdate::latest()->take(25)->get();

  • Ja, Methode take und limit ist ähnlich. Der Elternteil ist limitund take ist nur ein Pseudonym. Sie können die Datei Builder.php überprüfen

    – ibnɘꟻ

    12. September 2018 um 13:12 Uhr

Benutzer-Avatar
Kray

Ich habe eine Lösung gefunden, die mir hilft, das gleiche Ergebnis mit dem zu erzielen array_slice() Methode. In meinem Code habe ich array_slice( PickupResults::where('playerID', $this->getPlayerID())->get()->toArray(), -5 ); mit -5 Ich wollte die letzten 5 Ergebnisse der Abfrage.

1351870cookie-checkLaravel: Wie man die letzten N Einträge von DB bekommt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy