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

时间:2014-06-11 03:32:50

标签: php mysql sorting laravel laravel-4

  1. 我的Model表中有3列idmsgcreated_atcreated_at是时间戳,id是主键。
  2. 我还有5个数据,world => time4hello => time2haha => time1hihio => time5dunno => time3,这些数据按升序排列(如此处所列) )基于他们的id
  3. 在laravel 4中,我想获取这些数据,按升序排列它们并获取最后n个(在本例中为3个)记录数。所以,我希望在div中显示dunnoworldhihio行:

    dunno,time3
    world,time4
    hihio,time5
    

    我尝试了什么

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

    意外结果:

    haha,time1
    hello,time2
    dunno,time3
    

    也尝试了

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

    意外结果:

    hihio,time5
    world,time4
    dunno,time3
    

    我也尝试了反向而没有运气

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

    这个问题看起来相当简单,但我似乎无法理解我的逻辑。我在Laravel 4中仍然相当新,所以如果有的话,我会给予更好的解决方案,而不是使用orderBy()take()。非常感谢你!

4 个答案:

答案 0 :(得分:8)

你非常接近。

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

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

然后反转数组。您可以使用以下两种方法之一:传统的PHP(使用array_reverse)。

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

或laravel方式,使用Laravel的reverse类中的Collection函数。

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

http://laravel.com/api/class-Illuminate.Support.Collection.html

的API网站上查看Laravel的Collection文档

现在$ dates将包含您想要的输出。

dunno,time3
world,time4
hihio,time5

答案 1 :(得分:3)

你的第二次尝试非常接近。从数据库中检索行后,您只需要反转该数组。假设您有一个Illuminate\Support\Collection的实例,您只需要以下内容:

$expectedResult = $collection->reverse();

答案 2 :(得分:1)

要以升序获取最后三行:

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

现在,$ _dates的json输出将为您提供对象的对象。

要获取对象数组,请使用:

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

答案 3 :(得分:0)

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

$ show = $ reverse-> reverse();