2014-06-11 16 views
8
  1. Ho 3 colonne , msg e created_at nella tabella Modello. created_at è un timestamp e id è la chiave primaria.
  2. Ho anche 5 dati, world => time4, hello => time2, haha => time1, hihio => time5 e dunno => time3 e questi dati sono disposti in ordine crescente (come organizzato qui) sulla base della loro id.

In laravel 4, voglio recuperare questi dati, ordinarli in ordine crescente e prendere l'ultimo n (in questo caso, 3) numero di record. Quindi, voglio ottenere dunno, world e hihio righe visualizzate come questo in un div:Laravel: Come prendere le ultime n righe (qualsiasi numero) dopo l'ordine in ordine ascendente?

dunno,time3 
world,time4 
hihio,time5 

Quello che ho cercato

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

risultato indesiderato:

haha,time1 
hello,time2 
dunno,time3 

Anche provato

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

risultato indesiderato:

hihio,time5 
world,time4 
dunno,time3 

Ho anche provato il contrario, senza fortuna

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

Questo problema sembra abbastanza semplice, ma io proprio non riesco a ottenere la mia logica destra. Sono ancora abbastanza nuovo in Laravel 4, quindi darei punti bonus a soluzioni migliori rispetto all'utilizzo di orderBy() e take() se esiste. Grazie mille!

+2

Utilizzare 'orderBy ('created_at', 'desc') -> take (3)', quindi invertire la matrice. –

risposta

7

Vi sono molto vicino.

Sembra che si desidera ordinare prima l'array in ordine decrescente

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

ma poi invertire la matrice. Puoi farlo in due modi: il tradizionale PHP (usando array_reverse).

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

O il modo laravel, utilizzando la funzione reverse nella classe di laravel Collection.

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

Partenza Collection documentazione del laravel al loro sito API a http://laravel.com/api/class-Illuminate.Support.Collection.html

Ora $ date conterrà l'output desiderato.

dunno,time3 
world,time4 
hihio,time5 
3

Sei molto vicino al tuo secondo tentativo. Dopo aver recuperato le righe dal database, è sufficiente invertire la matrice. Supponendo di avere un'istanza di Illuminate\Support\Collection, è sufficiente il seguente:

$expectedResult = $collection->reverse(); 
Problemi correlati