如何按输入顺序返回最后n条记录

时间:2015-02-01 17:40:25

标签: laravel eloquent

来自Laravel 4 and Eloquent ORM - How to select the last 5 rows of a table,但我的问题有点不同。

如何按照创建方式(ASC)返回最后N条记录

因此,例如,按顺序插入以下记录:

first
second
third
fourth
fifth

我想要一个查询返回最后2条记录

fourth
fifth

2 个答案:

答案 0 :(得分:4)

Laravel Offset

DB::table('users')->skip(<NUMBER Calulation>)->take(5)->get();

您可以通过获取当前查询的计数并跳过$ query-&gt; count() - 5来计算N,以获取最后5条记录或您想要的任何内容。

实施例

$query = User::all();
$count = ($query->count()) - 5;

$query = $query->skip($count)->get();

答案 1 :(得分:1)

在纯SQL中,这是通过使用子查询来完成的。像这样:

SELECT * FROM (
    SELECT * FROM foo
    ORDER BY created_at DES
    LIMIT 2
) as sub
ORDER BY created_at ASC

因此限制发生在子查询中,然后在主查询中,顺序依次反转。 Laravel并不真正支持子查询。但是你仍然可以这样做:

$sub = DB::table('foo')->latest()->take(2);
$result = DB::table(DB::raw('(' . $sub->toSql() . ') as sub'))
            ->oldest()
            ->get();

如果你使用Eloquent:

$sub = Foo::latest()->take(2);
$result = Foo::from(DB::raw('(' . $sub->toSql() . ') as sub'))
             ->oldest()
             ->get();

注意 latestoldest只需添加orderBy('created_at) descasc