如何获取数据库最后3条数据并按criteria_id升序展示?
解决方法
如果你的需求是获取criteria_id为4、5、6的记录,并按criteria_id升序排列,可以用这几种方式实现:
1. 直接筛选指定ID并排序
如果这3条记录的ID明确是4、5、6,直接通过whereIn限定范围,再指定升序排序即可:
$criteria = Criteria::whereIn('criteria_id', [4, 5, 6]) ->orderBy('criteria_id', 'asc') ->get();
2. 先取最新3条再重新排序
如果"最后3条"是指数据库中最新生成的3条(恰好对应ID4、5、6),但查询结果是倒序的,可以用两种方式调整:
集合层面排序(Laravel内置方法)
利用Laravel集合的sortBy方法对查询结果重新排序:
$criteria = Criteria::latest()->take(3)->get()->sortBy('criteria_id');
如果需要转为数组,追加->toArray()即可。
SQL子查询二次排序
在SQL层面通过子查询先获取最新3条,再在外层按ID升序排列:
$criteria = Criteria::fromSub( Criteria::latest()->take(3), 'sub_query' )->orderBy('sub_query.criteria_id', 'asc')->get();
问题原因说明
- 你之前用的
Criteria::latest()->take(3)->get():latest()默认按创建时间(或自定义的时间字段)降序取前3条,但不会按criteria_id排序,所以结果不符合预期。 - 直接用
orderBy('criteria_id', 'desc')会得到6、5、4的倒序,把第二个参数改成asc就能得到升序结果。
内容的提问来源于stack exchange,提问作者Mas Raff
相关产品推荐
相关产品推荐

