laravel查看执行的sql语句
方法一:
我们有时候想测试一段代码生产的 SQL 语句,比如: 我们想看 App\User::all(); 产生的 SQL 语句,我们简单在 routes.php 做个实验即可:
//app/Http/routes.php
Route::get(‘/test-sql’, function() {
DB::enableQueryLog();
$user = App\User::all();
return response()->json(DB::getQueryLog());
});
然后我们在浏览器打开 http://www.yousite.com/test-sql 即可看到 $user = User::all(); 所产生的 SQL 了。
[
{
query: “select * from users
where users
.deleted_at
is null”,
bindings: [ ],
time: 1.37
}
]
方法二:
在routes.php添加如下代码
Event::listen(‘illuminate.query’, function(sql,sql,param) {
file_put_contents(public_path().’/sql.log’,sql.′[′.printr(sql.′[′.printr(param, 1).’]’.”\r\n”,8);
//echo sql.",with[".join(′,′,sql.",with[".join(′,′,param) .”]“;
});
方法三:
调用vendor\laravel\framework\src\Illuminate\Database\Query的toSql方法:
$query->toSql();
方法四:
使用监听器
第一步:创建监听器
php artisan make:listener QueryListener –event=illuminate.query
生成文件于 app/Listeners/QueryListener.php
然后删除 app/Listeners/QueryListener.php 顶部的 use App\Events\illuminate.query;, 这是自动生成的。
第二步:注册事件
打开 app/Providers/EventServiceProvider.php,在 $listen 中添加 illuminate.query 事件的监听器为 QueryListener:
protected $listen = [
‘illuminate.query’ => [
QueryListener::class,
],
];
当然在类前面你需要 use App\Listeners\QueryListener; 不然就报类不存在了。
第三步:添加逻辑
修改上面生成的文件,我们把 SQL 查询记录到日志里,所以编辑 handle 方法为:
/**
* Handle the event.
*
* @param Events $event
* @return void
*/
public function handle($sql, $params)
{
if (env('APP_ENV', 'production') == 'local') {
foreach ($params as $index => $param) {
if ($param instanceof DateTime) {
$params[$index] = $param->format('Y-m-d H:i:s');
}
}
$sql = str_replace("?", "'%s'", $sql);
array_unshift($params, $sql);
Log::info(call_user_func_array('sprintf', $params));
}
}
上面我们用到了两个类:Log 与 DateTime, 别忘记引入它们。
解释一下上面的代码:
illuminate.query 事件触发时的参数为两个:handle(sql,sql,params), SQL 预处理语句与查询参数值;
我们只在开发环境记录 SQL:env(‘APP_ENV’, ‘production’) == ‘local’;
我们的参数里可能存在日期类型,所以直接记日志会报错,所以处理一下:$param instanceof DateTime;
然后跑一下试试吧,应该在日志里就能看到:
[2015-07-10 02:45:39] local.INFO: update tricks
set view_cache
= “10”, updated_at
= “2015-07-10 02:45:39” where id
= “2”
laravel查看执行的sql语句的更多相关文章
- django框架 - 实时查看执行的sql语句
django框架采用的ORM模型,我们可以通过mysql的日志记录实时看到执行的sql语句,具体步骤如下: 第一步:找到mysql的配置文件 第二步:编辑mysql配置文件 第三步:重启mysql 第 ...
- Django 之 查看执行的sql语句
前提: 我的app名称为core,models.py内容如下: # coding:utf-8 from django.db import models # Create your models her ...
- MySql使用show processlist查看正在执行的Sql语句
今天上班例行的查看了下服务器的运行状况,发现服务器特卡,是mysqld这个进程占用CPU到了99%导致的. 比较好奇是那个程序在使用mysql导致cpu这么高的,通过show processlist命 ...
- mysql查看正在执行的sql语句
有2个方法: 1.使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应历史记录,查看不到.好处是不用设置,不会保存. -- use information_schema; ...
- 两种方式:mysql查看正在执行的sql语句
mysql查看正在执行的sql语句 2015年08月21日 17:32:59 阅读数:15398 有2个方法: 1.使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应 ...
- SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划
我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...
- 查询Oracle正在执行的sql语句
--查询Oracle正在执行的sql语句及执行该语句的用户 SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, ...
- IBatis.Net获取执行的Sql语句
前言 IBatis.Net中Sql语句是些在配置文件中的,而且配置文件是在程序启动时读取的(我们开发的时候需要将其设置成较新复制或者是始终复制),而不是程序将其包含在其中(例如NHibernate的映 ...
- Python Django 之 直接执行自定义SQL语句(一)
一.执行自定义SQL方法 1.Executing custom SQL directly 直接执行自定义SQL,这种方式可以完全避免数据模型,而是直接执行原始的SQL语句. 2.Manage ...
随机推荐
- pop3密码嗅探
成品与代码可在 https://pan.baidu.com/s/1MPfU2T_6YN6mgxUL0wrZxw 下载 来说下pop协议, 英文版,https://tools.ietf.org/html ...
- Xtrareport二之固定数据绑定
已经了解了XtraReport的初步用法,现在在进一步了解数据绑定 我们还是先不整高深的,先来个写死的,让我们的数据库可以通过报表呈现先 1. 准备 还在上节基础上,选中设计器report的page ...
- Value cannot be null. Parameter name: source
下图主要想说.net抛错后的优先级, 错误1是根本原因,排第一位: 错误2里的方法包含了错误1,排第二位: 错误3就是整个Action了. 类似这样的错误,按照这样的顺序来解决bug,相信很受用.
- python 3.6 链接mssql 进行数据操作
#!/usr/bin/env python # -*- coding: UTF-8 -*- import pymssql class MSSQL(object): ''' 对pymssql的简单封装 ...
- Annotation(注解)的概念、作用及常用注解
Annotation的概念: 能够添加到 Java 源代码的语法元数据.类.方法.变量.参数.包都可以被注解,可用来将信息元数据与程序元素进行关联.Annotation 中文常译为“注解”. 从JDK ...
- Python列表类型及常用操作
Python列表类型 1.用途: 存放多个值,可以根据索引存取值 2.定义方式: 在[ ]内用逗号分割开多个任意类型的值 l=['yven','law','lyf'] #l=list(['yven', ...
- php session 存储到redis
PHP 的会话默认是以文件的形式存在的,可以配置到 NoSQL 中,即提高了访问速度,又能很好地实现会话共享,,,爽歪歪! 配置方式如下: 方法一:修改 php.ini 的设置 1 2 session ...
- Struts2_HelloWorld1
打开 eclipse,新建 web 项目. 因为可能需要 jstl 表达式,所以添加 jstl需要的jar包. 下载链接:http://pan.baidu.com/s/1hr6mBI0 将jar拷贝至 ...
- Extjs4几个小知识点
1.Why user "var me=this" in Extjs4?有个英文解释很好: Say you have a method in your object A which ...
- input-file类型accept 属性对性能的影响
上传图片的时候,有时会加一些限制,如下,进行上传类型的过滤,如 <input type="file" name="pic" id="pic&qu ...