来自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
答案 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();
注意 latest
和oldest
只需添加orderBy('created_at)
desc
和asc
。