2014-06-11 6 views
8
  1. Ich habe 3 Spalten id, msg und created_at in meiner Modell-Tabelle. created_at ist ein Zeitstempel und id ist Primärschlüssel.
  2. Ich habe auch 5 Daten, world => time4, hello => time2, haha => time1 sind hihio => time5 und dunno => time3 und diese Daten in aufsteigender Reihenfolge angeordnet sind (wie hier angeordnet) auf der Grundlage ihrer id.

In Laravel 4 möchte ich diese Daten abrufen, ordnen sie in aufsteigender Reihenfolge und nehmen Sie die letzte n (in diesem Fall 3) Anzahl der Datensätze. Also, ich möchte dunno, world und hihio Zeilen wie diese in einem div angezeigt bekommen:Laravel: Wie nimmst du letzte n (beliebige Anzahl) Reihen nach aufsteigender Reihenfolge?

dunno,time3 
world,time4 
hihio,time5 

Was ich habe versucht,

Model::orderBy('created_at','asc')->take(3); 

unerwünschtes Ergebnis:

haha,time1 
hello,time2 
dunno,time3 

Auch versucht

Model::orderBy('created_at','desc')->take(3); 

unerwünschtes Ergebnis:

hihio,time5 
world,time4 
dunno,time3 

Ich habe versucht, auch die umgekehrte ohne Glück

Model::take(3)->orderBy('created_at','asc'); 

Dieses Problem scheint ziemlich einfach, aber ich kann einfach nicht scheinen, meine Logik zu bekommen Recht. Ich bin immer noch ziemlich neu in Laravel 4, also würde ich Bonuspunkte zu besseren Lösungen geben, als wenn man orderBy() und take() benutzt. Vielen Dank!

+2

Verwenden Sie 'orderBy ('created_at', 'desc') -> take (3)', und kehren Sie dann das Array um. –

Antwort

7

Sie sind ganz in der Nähe.

Es klingt wie Sie, um durch Absenken des Array zuerst bestellen möchten

Model::orderBy('created_at','desc')->take(3); 

aber dann das Array umkehren. Sie können dies auf zwei Arten tun, entweder das traditionelle PHP (mit array_reverse).

$_dates = Model::orderBy('created_at','desc')->take(3); 
    $dates = array_reverse($_dates); 

Oder die Laravel Art und Weise, mit der reverse Funktion in Collection Klasse Laravel.

$_dates = Model::orderBy('created_at','desc')->take(3)->reverse(); 

Check out Laravel der Collection Dokumentation an ihrer API Website unter http://laravel.com/api/class-Illuminate.Support.Collection.html

Jetzt $ wird die Reisedaten Ausgabe enthalten, die Sie wünschen.

dunno,time3 
world,time4 
hihio,time5 
3

Sie sind ziemlich nah mit Ihrem zweiten Versuch. Nach dem Abrufen der Zeilen aus der Datenbank müssen Sie nur das Array umkehren. Angenommen, Sie haben eine Instanz von Illuminate\Support\Collection, müssen Sie nur auf die folgenden:

$expectedResult = $collection->reverse(); 
Verwandte Themen