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

求嵌套SQL查询对应的Laravel模型实现方式

将嵌套SQL转换为Laravel中TableA模型的等效实现

原SQL语句

SELECT *
FROM  (
   SELECT * FROM tbl
   ORDER  BY updated_at
   LIMIT  20
   )
ORDER  BY random()
LIMIT 5;

实现代码与说明

已知TableA模型对应tbl表,我们可以通过Laravel的子查询语法复刻原SQL的嵌套逻辑,以下是两种可行写法:

写法一:分步构建子查询

// 先构建内层子查询:按updated_at排序取前20条
$subQuery = TableA::orderByRaw('updated_at ASC NULLS FIRST')->limit(20);

// 基于子查询执行外层逻辑:随机排序后取5条
$result = DB::table($subQuery, 'sub')
            ->orderByRaw('random()')
            ->limit(5)
            ->get();

写法二:使用fromSub链式调用(Laravel 5.6+支持)

$result = TableA::fromSub(
    TableA::orderByRaw('updated_at ASC NULLS FIRST')->limit(20),
    'sub'
)->orderByRaw('random()')
->limit(5)
->get();

两种写法的逻辑完全匹配原SQL:先通过内层查询锁定最新的20条数据,再对这20条做随机排序,最终返回5条结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:42:04