如何将原生 SQL 查询转换为 Laravel Eloquent 查询
发布时间 - 2025-12-31 00:00:00 点击率:次本文详解如何将统计最近 30 天每日浏览量的原生 sql 查询,准确、高效地转换为 laravel 的 query builder 写法(注意:该场景更适合用 query builder 而非 eloquent 模型,因无需模型逻辑且涉及聚合与日期函数)。
在 Laravel 中,将原生 SQL 转换为可维护、安全的查询时,应优先使用 DB::table()(即 Query Builder),而非强行套用 Eloquent 模型——尤其当查询聚焦于聚合、分组和数据库函数(如 DATE())时。Eloquent 更适用于单模型操作与关系映射,而本例本质是面向 views 表的聚合统计,直接使用 Query Builder 更简洁、语义更清晰。
以下是正确且可运行的 Laravel 实现:
use Illuminate\Support\Facades\DB;
$stats = DB::table('views')
->selectRaw('DATE(created_at) as day, COUNT(*) as titles')
->where('view_ty
pe', 'App\\Title')
->groupByRaw('DATE(created_at)')
->orderByRaw('DATE(created_at) DESC')
->limit(30)
->get();✅ 关键修正说明:
- 使用 selectRaw() 替代字符串拼接字段,避免引号/转义错误,并确保 DATE(created_at) 被原样传递至 SQL;
- groupByRaw('DATE(created_at)') 是必须的——仅 groupBy('created_at') 会按完整时间戳(含时分秒)分组,导致同一天多条记录被拆分为多组;
- orderByRaw() 保证按日期降序排序,而非按原始 created_at 时间戳(否则可能因同一日多条记录排序不稳定);
- view_type 值中的反斜杠需双写 'App\\Title',PHP 字符串中 \T 会被转义,双反斜杠确保实际传入 'App\Title';
- 不建议使用 ->get() 返回集合后在 PHP 中截取前 30 条,务必让数据库执行 LIMIT 30 以提升性能。
⚠️ 注意事项:
- 若需兼容 MySQL 8.0+ 或 PostgreSQL,可考虑 DATE_TRUNC('day', created_at)(PostgreSQL)或 DATE(created_at)(MySQL)——Laravel 默认适配 MySQL,上述写法已足够;
- 如项目已定义 View 模型,仍不推荐用 View::select(...)->groupBy(...)->get(),因为 Eloquent 会自动添加 id 等默认字段并干扰 GROUP BY,易触发 SQL 错误(如 ONLY_FULL_GROUP_BY);
- 生产环境建议为 view_type 和 created_at 字段添加联合索引,显著加速 WHERE + GROUP BY 查询:
ALTER TABLE `views` ADD INDEX `idx_view_type_created_at` (`view_type`, `created_at`);
通过以上写法,你不仅完成了语法转换,更获得了可读性强、可测试、防 SQL 注入且性能可控的 Laravel 风格查询。
# mysql
# php
# laravel
# cad
# app
# sql
# select
# date
# 字符串
# table
# postgresql
# 数据库
# 而非
# 转换为
# 多条
# 适用于
# 不稳定
# 更适合
# 如何将
# 浏览量
# 同一天
# 按原
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
如何快速上传建站程序避免常见错误?
如何用IIS7快速搭建并优化网站站点?
浅谈javascript alert和confirm的美化
php json中文编码为null的解决办法
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
Python高阶函数应用_函数作为参数说明【指导】
香港服务器部署网站为何提示未备案?
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
JS中对数组元素进行增删改移的方法总结
Laravel如何实现一对一模型关联?(Eloquent示例)
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
WordPress 子目录安装中正确处理脚本路径的完整指南
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
如何在Ubuntu系统下快速搭建WordPress个人网站?
Linux网络带宽限制_tc配置实践解析【教程】
Linux系统命令中screen命令详解
Laravel中的withCount方法怎么高效统计关联模型数量
如何在七牛云存储上搭建网站并设置自定义域名?
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
如何在万网开始建站?分步指南解析
昵图网官方站入口 昵图网素材图库官网入口
如何在自有机房高效搭建专业网站?
如何快速搭建高效简练网站?
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
教你用AI润色文章,让你的文字表达更专业
如何在阿里云高效完成企业建站全流程?
Laravel如何生成API文档?(Swagger/OpenAPI教程)
Swift开发中switch语句值绑定模式
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
浅谈redis在项目中的应用
在Oracle关闭情况下如何修改spfile的参数
Laravel怎么使用Intervention Image库处理图片上传和缩放
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
深圳网站制作培训,深圳哪些招聘网站比较好?
Laravel怎么上传文件_Laravel图片上传及存储配置
如何在IIS中新建站点并配置端口与物理路径?
详解Android图表 MPAndroidChart折线图
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
网站建设保证美观性,需要考虑的几点问题!
焦点电影公司作品,电影焦点结局是什么?
上一篇:微信小程序 石头剪刀布实例代码
上一篇:微信小程序 石头剪刀布实例代码


pe', 'App\\Title')
->groupByRaw('DATE(created_at)')
->orderByRaw('DATE(created_at) DESC')
->limit(30)
->get();