Laravel实时监听打印SQL
Laravel5如何实现打印sql,Elequent ORM ->toSql() 可以输出sql语句,但如果带binding参数的,输出的语句会带?。可以通过事件监听器来记录sql语句到日志中。
Elequent ORM ->toSql()
可以输出sql语句,但如果带binding
参数的,输出的语句会带?
,类似下面这样:
select * from `rooms` where `rooms`.`project_id` = ?;
barryvdh/laravel-debugbar
这个包需要添加代码注入配置,仅限浏览器输出,如果是postman工具调试,就无法查看输出的SQL了。
下面通过事件监听器将sql语句保存到Log
日志中:
- 首先,创建监听器
php artisan make:listener QueryListener --event=Illuminate\\Database\\Events\\QueryExecuted
- 打开
app/Providers/EventServiceProvider.php
,在$listen
中添加
protected $listen = [
'Illuminate\Database\Events\QueryExecuted' => [
'App\Listeners\QueryListener',
]
];
- 打开
QueryListener
文件
use \Log;
public function handle (QueryExecuted $event)
{
if (env('APP_ENV', 'production') == 'local') {
$sql = str_replace("?", "'%s'", $event->sql);
$log = vsprintf($sql, $event->bindings);
Log::info($log);
}
}
评论啦~
共有1条评论
- 阳阳可以将sql写错,,也可以输出