You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Eloquent如何单查询从最新20条记录中随机选取5条数据

实现方案

你可以直接借助 Eloquent 提供的子查询构造方法实现,最终生成的 SQL 和你提供的原生逻辑完全一致,仅触发一次数据库查询,无需后续集合处理。


适用 Laravel 5.6+ 版本(推荐写法)

假设你的 Eloquent 模型Demo对应表DemoTable,直接使用fromSub构造嵌套查询即可:

$randomData = Demo::fromSub(
    Demo::orderByDesc('ShippingDate')->limit(20),
    'temp_table'
)->inRandomOrder()->limit(5)->get();

低版本 Laravel 兼容写法

如果 Laravel 版本低于 5.6 没有fromSub方法,可通过DB::raw拼接子查询实现:

use Illuminate\Support\Facades\DB;

$randomData = Demo::select(DB::raw('temp_table.*'))
    ->from(DB::raw('(SELECT * FROM DemoTable ORDER BY ShippingDate DESC LIMIT 20) AS temp_table'))
    ->inRandomOrder()
    ->limit(5)
    ->get();

说明

  • 上述写法生成的SQL执行逻辑和你提供的原生语句完全一致:先取最近20条数据作为临时表,再从临时表随机取5条
  • inRandomOrder会自动适配当前数据库的随机排序语法,MySQL环境下对应ORDER BY RAND()
  • 全程仅触发一次数据库查询,不会在查询结果返回后做二次筛选、排序处理

内容的提问来源于stack exchange,提问作者farshidpg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:27:03