我自己是用第一种方法来调试的,第三种不行 不知道为啥

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());
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

}); 
然后我们在浏览器打开 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));
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

上面我们用到了两个类: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语句的更多相关文章

  1. laravel 查看SQL语句

    Route::get('/test-sql', function(){ DB::enableQueryLog(); $user = App\User::first(); return DB::getQ ...

  2. 查看 Laravel 的 SQL 语句的方法

    在使用 Laravel 的 Eloquent 进行数据查询的时候,很多小伙伴都想看到背后执行的 SQL 语句到底是什么样的,这小笔录就是解决这个小问题的: 在 Providers/AppService ...

  3. sql中的系统表sysobjects以及如何查看sql语句的执行时间

    使用sysobjects可以快速查看数据库中表.视图.存储过程.触发器.约束等的信息. 大牛文章:http://www.cnblogs.com/atree/p/SQL-Server-sysobject ...

  4. 查看SQL语句执行时间与测试SQL语句性能

    查看SQL语句执行时间与测试SQL语句性能 写程序的人,往往需要分析所写的SQL语句是否够优化.是否能提升执行效率,服务器的响应时间有多快,这个时候就需要用到SQL的STATISTICS状态值来查看了 ...

  5. SQLServer 查看SQL语句的执行时间

    在MSSQL Server中通过查看SQL语句执行所用的时间,来衡量SQL语句的性能. 通过设置STATISTICS我们可以查看执行SQL时的系统情况.选项有PROFILE,IO ,TIME.介绍如下 ...

  6. MySQL查看SQL语句执行效率

    Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看 SQL 语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好 ...

  7. SQL 查看SQL语句的执行时间 直接有效的方法

    在MSSQL Server中通过查看SQL语句执行所用的时间,来衡量SQL语句的性能. 通过设置STATISTICS我们可以查看执行SQL时的系统情况.选项有PROFILE,IO ,TIME.介绍如下 ...

  8. SQL SERVER 查看SQL语句IO,时间,索引消耗

    1.查看SQL语句IO消耗 set statistics io on     select * from dbo.jx_order where order_time>'2011-04-12 12 ...

  9. MySQL查看SQL语句执行效率(转)

    Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看 SQL 语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好 ...

随机推荐

  1. Android解决软键盘弹出将布局顶到上面

    有时候我们在下面的布局是一个RadioGroup,然后当页面中的EditText获得焦点的时候,会将地步的RadioGroup顶起来,这时候我们只需要在AndroidMainfest中RadioGro ...

  2. DevExpress组件之——TreeList组件

    由于是第一次接触到第三方控件DevExpress中的TreeList,对其进行了进一步的研究,采用递归算法实现.做下自己熟悉第三方控件的整个过程,为和我一样处理于起步阶段的同仁们提供个参考,以下为最终 ...

  3. Pandas缺失数据

    数据丢失(缺失)在现实生活中总是一个问题. 机器学习和数据挖掘等领域由于数据缺失导致的数据质量差,在模型预测的准确性上面临着严重的问题. 在这些领域,缺失值处理是使模型更加准确和有效的重点. 何时以及 ...

  4. Java中异常的捕获顺序(多个catch)

    import java.io.IOException; public class ExceptionTryCatchTest { public void doSomething() throws IO ...

  5. 案例学习:留言本制作V1、V2

    需求V1: 请设计一个留言本功能的程序,包括普通用户发布和查看留言,管理员登录.查看和删除留言. 实验指导内容详见留言本制作(1) 需求V2: 1.请修改留言本程序的功能,添加普通用户添加登录功能,用 ...

  6. mysql中的过滤分组

    本文节选自<MYSQL必知必会> 一. 过滤分组 除了能用GROUP BY分组数据外,MySQL还允许过滤分组,规定包括哪些分组,排除哪些分组.例如,可能想要列出至少有两个订单的所有顾客. ...

  7. Centos6.8 Jetty 安装配置

    ssh root@IP Password------------------------------------------------------------------------------↑登 ...

  8. 前端 velocity(.vm)模板里写ajax出现解析异常

    异常信息:Caused by: org.apache.velocity.exception.ParseErrorException: Encountered "{" at dist ...

  9. Tomcat应用服务器被黑客 肉鸡攻击 记录

    线上一台应用服务器报警,负载过高,这个就诡异了,因为只是一个普通的服务器,应用使用人员不到10个人,咋会负载高,肯定有问题哪,登陆上去查看, top查看哪个占据的cpu资源比较多 [root@aew0 ...

  10. sublime上配置markdown

    等等等等 简书一个不错的教程:Sublime Text3的Markdown配置 补充说明:第一步可以直接找 Tools-->install package control. ^.^ ...