Laraval-Debugbar的简单使用

之前有遇到需要打印出执行SQL的问题,在Laravel的ORM关联模型中 之前都是用 builder 对象执行 toSql() 方法 或者写错一个字段名 这样会报错显示出SQL(满脑子的骚操作…) 感觉不能在懒下去了 还是要回归正途使用 Laravel-Debugbar 然后安装又遇到了幺蛾子


打印Laravel执行SQL

一般都是修改 app/Provider/AppServiceProvider 文件 在 boot() 方法中加入代码 记得在上面 引入 use DB;

比如下面

1
2
3
DB::listen(function($sql, $bindings, $time) {
echo 'SQL语句执行:'.$sql.',参数:'.json_encode($bindings).',耗时:'.$time.'ms';
});

今天还看到一种写法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
\DB::listen(
function ($sql) {
foreach ($sql->bindings as $i => $binding) {
if ($binding instanceof \DateTime) {
$sql->bindings[$i] = $binding->format('\'Y-m-d H:i:s\'');
} else {
if (is_string($binding)) {
$sql->bindings[$i] = "'$binding'";
}
}
}
// Insert bindings into query
$query = str_replace(array('%', '?'), array('%%', '%s'), $sql->sql);
$query = vsprintf($query, $sql->bindings);
// Save the query to file
$logFile = fopen(
storage_path('logs' . DIRECTORY_SEPARATOR . date('Y-m-d') . '_query.log'),
'a+'
);
fwrite($logFile, date('Y-m-d H:i:s') . ': ' . $query . PHP_EOL);
fclose($logFile);
}
);

这个会记录下Laravel执行过程中所有执行过的SQL语句 写入到 storage\logs\xxxx-xx-xx_query.log 中 也挺方便的

安装Laravel-Debugbar

Laravel-debugbar是一个laravel调试神器 Github 地址在 https://github.com/barryvdh/laravel-debugbar 跟着步骤一步步安装就好了

安装

使用 Composer 直接运行 composer require barryvdh/laravel-debugbar --dev 然后在 .env 配置文件中设置 APP_DEBUG=true 即打开 debug 模式

配置

编辑 config/app.php 文件 在中 providers 数组下 增加 Barryvdh\Debugbar\ServiceProvider::class, 注册服务提供者

同时在该文件的 aliases 数组下 增加 'Debugbar' => Barryvdh\Debugbar\Facade::class, 给门面起个别名 方便后续使用

然后执行 php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider" 它会自动帮你在 config 目录下 生成 debugbar.php 配置文件 其主要配置都在这个文件里了

测试

上面安装完了后就可以测试下了,访问你的项目 如果在浏览器看到下面就成功了

laravel_debugbar

注意

debugbar 是基于前端内容显示的 所以你的访问路由要有页面 内容输出,不要在你的代码中间加入 exit();, dd(); 等中断操作 不然他是显示不了的。我测试的时候就加了 dd() 中断输出,然后一直没有debugbar内容显示 郁闷了好久!!! 更多详细文档看官网吧 http://phpdebugbar.com/docs/readme.html#php-debug-bar


-------------The End-------------