Laravel : How to take last n(any number) rows after ordered in ascending order? Laravel : How to take last n(any number) rows after ordered in ascending order? laravel laravel

Laravel : How to take last n(any number) rows after ordered in ascending order?


You are very close.

It sounds like you want to first order the array by descending order

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

but then reverse the array. You can do this one of two ways, either the traditional PHP (using array_reverse).

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

Or the laravel way, using the reverse function in Laravel's Collection class.

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

Check out Laravel's Collection documentation at their API site at http://laravel.com/api/class-Illuminate.Support.Collection.html

Now $dates will contain the output you desire.

dunno,time3world,time4hihio,time5


You're pretty close with your second attempt. After retrieving the rows from the database, you just need to reverse the array. Assuming you have an instance of Illuminate\Support\Collection, you just need to the following:

$expectedResult = $collection->reverse();


To get last three rows in ascending order:

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

Now, the json output of $_dates will give you a object of objects.

To get array of objects use:

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