一个简单的 SQL Debug 技巧
基于某些原因,你不能使用 Laravel DebugBar ,这篇文章可能会帮到你。
针对 Laravel 应用的优化远远不止消除 N+1 问题那么简单。合理的使用 Laravel DebugBar 可以对模型内存的使用以及 SQL 查询时效等问题给出合理的解决方案。
可能你并不喜欢使用 Laravel DebugBar,或者基于某些原因而不能使用(比如基于接口应用的开发),那么 Database Listener 将会是个不错的方法,他将记录你的 SQL 查询到日志。
这在生产环境与测试环境同样适用,你可以很简单的通过 env 或者 config 控制它的启用与否。
如何使用:
将此添加到你的 AppServiceProvider 的启动方法中
if (env("SQL_DEBUG_LOG"))
{
DB::listen(function ($query) {
Log::debug("DB: " . $query->sql . "[". implode(",",$query->bindings). "]");
});
}
如果你在生产环境中使用它的话,我建议你可以把 config 中的配置信息放到env中,然后你还可以(并且应该)缓存这个 config 信息
我发现另一个问题是假如 sql 调用本身失败,会抛出一个异常,在成功调用前其监听的 DB::listen 并不会进行记录,并且该异常会在返回到监听之前发生
如果你遇到 Lavavel 的性能问题,另一个值得你去看的是 Jonathan Reinink 的 Eloquent ORM 课程
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。