laravel查看sql语句
2016-12-21 22:48
204 查看
方法一:
我们有时候想测试一段代码生产的 SQL 语句,比如: 我们想看 App\User::all(); 产生的 SQL 语句,我们简单在 routes.php 做个实验即可:
//app/Http/routes.php
Route::get(‘/test-sql’, function() {
});
然后我们在浏览器打开 http://www.yousite.com/test-sql 即可看到 $user = User::all(); 所产生的 SQL 了。
[
{
query: “select * from
bindings: [ ],
time: 1.37
}
]
方法二:
在routes.php添加如下代码
Event::listen(‘illuminate.query’, function(sql,param) {
file_put_contents(public_path().’/sql.log’,sql.′[′.printr(param, 1).’]’.”\r\n”,8);
//echo 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 方法为:
上面我们用到了两个类:Log 与 DateTime, 别忘记引入它们。
解释一下上面的代码:
illuminate.query 事件触发时的参数为两个:handle(sql,params), SQL 预处理语句与查询参数值;
我们只在开发环境记录 SQL:env(‘APP_ENV’, ‘production’) == ‘local’;
我们的参数里可能存在日期类型,所以直接记日志会报错,所以处理一下:$param instanceof DateTime;
然后跑一下试试吧,应该在日志里就能看到:
[2015-07-10 02:45:39] local.INFO: update
原文地址:https://my.oschina.net/melonol/blog/126694
Author:
本文地址:http://blog.csdn.net/leedaning/article/details/53792727
我们有时候想测试一段代码生产的 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
userswhere
users.
deleted_atis null”,
bindings: [ ],
time: 1.37
}
]
方法二:
在routes.php添加如下代码
Event::listen(‘illuminate.query’, function(sql,param) {
file_put_contents(public_path().’/sql.log’,sql.′[′.printr(param, 1).’]’.”\r\n”,8);
//echo 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,params), SQL 预处理语句与查询参数值;
我们只在开发环境记录 SQL:env(‘APP_ENV’, ‘production’) == ‘local’;
我们的参数里可能存在日期类型,所以直接记日志会报错,所以处理一下:$param instanceof DateTime;
然后跑一下试试吧,应该在日志里就能看到:
[2015-07-10 02:45:39] local.INFO: update
tricksset
view_cache= “10”,
updated_at= “2015-07-10 02:45:39” where
id= “2”
原文地址:https://my.oschina.net/melonol/blog/126694
Author:
leedaning
本文地址:http://blog.csdn.net/leedaning/article/details/53792727
相关文章推荐
- laravel 查看SQL语句
- 简单的Laravel查看Sql语句调试。
- 查看SQL语句的执行时间
- 方便查看数据表和字段的SQL语句(适用于SQLServer2000)
- [置顶]一个查看MSSQL数据库中所有表信息的SQL语句
- sql 2005 新增的查看sql语句运行情况
- 如何查看,当运行一个hibernate 方法后到底执行了哪些SQL语句
- Oracle中查看锁表情况的Sql语句
- 如何在sqlplus中查看oracle数据库sql语句执行计划,执行时间和统计信息
- 查看sqlserver数据库结构的SQL语句
- 在查询分析器中查看Sql语句执行计划
- 用SQL语句查看表或视图的注释信息
- 查看SQL语句的执行时间
- [转]方便查看数据表和字段的SQL语句(适用于SQLServer2000)
- SQL修改字段、查看表属性语句
- 如何查看oracle的锁是哪条sql语句引起的8876e7eb
- 查看所用模块的名称及所在站点的SQL语句
- 使用SQL查看用户所使用的SQL语句
- SQL语句大全—查看数据(三)
- 如何用sqll语句查看当前表是否被锁?