Laravel 如何按输入顺序返回最后n条记录
是的,但我的问题有点不同 如何返回按创建方式排序的最后N条记录(ASC) 例如,以下记录按顺序插入:Laravel 如何按输入顺序返回最后n条记录,laravel,eloquent,Laravel,Eloquent,是的,但我的问题有点不同 如何返回按创建方式排序的最后N条记录(ASC) 例如,以下记录按顺序插入: first second third fourth fifth 我想要一个返回最后2条记录的查询 fourth fifth 拉维偏移量 DB::table('users')->skip()->take(5)->get() 您可以通过获取当前查询的计数并跳过$query->count()-5以获取最后5条记录或您想要的任何内容来计算N 前 在纯SQL中,这是通过使用子查询来完成的。大概是这样的
first
second
third
fourth
fifth
我想要一个返回最后2条记录的查询
fourth
fifth
拉维偏移量
DB::table('users')->skip()->take(5)->get()代码>
您可以通过获取当前查询的计数并跳过$query->count()-5以获取最后5条记录或您想要的任何内容来计算N
前
在纯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();
如果你使用雄辩的语言:
$sub = Foo::latest()->take(2);
$result = Foo::from(DB::raw('(' . $sub->toSql() . ') as sub'))
->oldest()
->get();
注意最新的
和最老的只需分别添加一个带有desc
和asc
的orderBy('created_at)
。非常感谢。这是否会对性能产生重大影响?完全不会,因为您将进行完全相同的查询。再加上。我在代码中包含了一个示例。请记住,只需在查询的基础上进行构建,而不是对DB@Rafael您的第二个示例实际上运行了2个查询。首先,获取所有记录,然后再次使用跳过:|是的,我想是吧。但这是唯一的办法。@Rafael,是的。看到我的答案了吗
$sub = Foo::latest()->take(2);
$result = Foo::from(DB::raw('(' . $sub->toSql() . ') as sub'))
->oldest()
->get();