如何将该SQL查询转换为Laravel Eloquent语句?
转换后的Laravel Eloquent查询写法
没问题,我来帮你把这条SQL转换成Laravel Eloquent的实现方式~
首先先拆解下原SQL的逻辑:先对table表按time降序拉取所有数据作为临时表t,再基于这个临时表按numbers字段分组。对应的Eloquent写法有两种常见方式:
方式一:使用查询构造器直接实现
// 第一步:定义子查询(对应原SQL里的括号部分) $subquery = DB::table('table') ->select('*') ->orderBy('time', 'desc'); // 第二步:基于子查询执行外层分组查询 $result = DB::table($subquery, 't') // 给子查询指定别名`t` ->groupBy('numbers') ->get();
方式二:结合模型使用(如果有对应模型的话)
假设你的table表对应Laravel模型是TableModel(记得根据实际模型名修改),可以这样写:
// 定义子查询 $subquery = TableModel::select('*') ->orderBy('time', 'desc'); // 外层分组查询 $result = DB::table($subquery, 't') ->groupBy('numbers') ->get();
注意事项
要特别提醒下:这种SELECT *搭配GROUP BY numbers的写法,在MySQL开启ONLY_FULL_GROUP_BY严格模式时会报错,因为不符合分组查询的规范。如果你的项目启用了严格模式,建议明确指定要查询的字段,或者调整逻辑来获取每个分组里你需要的具体数据(比如每个numbers分组下最新的那条记录)。
内容的提问来源于stack exchange,提问作者Shahadat
相关产品推荐
相关产品推荐

