Laravel:按升序排序后如何获取最后n行(任意数字)?

Mar*_*ark 9 php mysql sorting laravel laravel-4

  1. 我有3列id,msgcreated_at在我的模型表.created_at是一个时间戳,id是主键.
  2. 我也有5个DATAS, ,world => time4,,hello => time2 和基于它们的这些的数据都是按升序排列(如下安排).haha => time1hihio => time5dunno => time3id

在laravel 4中,我想获取这些数据,按升序排列它们并获取最后n个(在本例中为3个)记录数.所以,我想得到dunno,worldhihio在div中显示如下行:

dunno,time3
world,time4
hihio,time5
Run Code Online (Sandbox Code Playgroud)

我试过了什么

Model::orderBy('created_at','asc')->take(3);
Run Code Online (Sandbox Code Playgroud)

不良后果:

haha,time1
hello,time2
dunno,time3
Run Code Online (Sandbox Code Playgroud)

也试过了

Model::orderBy('created_at','desc')->take(3);
Run Code Online (Sandbox Code Playgroud)

不良后果:

hihio,time5
world,time4
dunno,time3
Run Code Online (Sandbox Code Playgroud)

我也试过反面而没有运气

Model::take(3)->orderBy('created_at','asc');
Run Code Online (Sandbox Code Playgroud)

这个问题似乎相当简单,但我似乎无法使我的逻辑正确.我在Laravel 4中还是比较新的所以我会给予更好的解决方案奖励积分而不是使用orderBy(),take()如果有的话.非常感谢你!

Tim*_*eld 8

你很近.

听起来你想先按降序排序数组

  Model::orderBy('created_at','desc')->take(3);
Run Code Online (Sandbox Code Playgroud)

但然后反转阵列.您可以使用以下两种方法之一,即传统的PHP(使用array_reverse).

  $_dates = Model::orderBy('created_at','desc')->take(3);
  $dates = array_reverse($_dates);
Run Code Online (Sandbox Code Playgroud)

或者laravel方式,使用reverseLaravel Collection类中的函数.

  $_dates = Model::orderBy('created_at','desc')->take(3)->reverse();
Run Code Online (Sandbox Code Playgroud)

查看Laravel的CollectionAPI文档,网址为http://laravel.com/api/class-Illuminate.Support.Collection.html

现在$ date将包含您想要的输出.

dunno,time3
world,time4
hihio,time5
Run Code Online (Sandbox Code Playgroud)