php 原生打印sql,Laravel原生SQL打印之SQL监听

0x01 创建SQL监听器

Laravel 5.1版本:php artisan make:listener QueryListener --event=illuminate.query

Laravel 5.2、5.3、5.4版本:php artisan make:listener QueryListener --event=Illuminate\\Database\\Events\\QueryExecuted

0x02 注册SQL监听事件

Laravel 5.1版本:打开 app/Providers/EventServiceProvider.php,在 $listen 中添加 illuminate.query 事件的监听器为 QueryListener

头部引入 use App\Listeners\QueryListener;

protected $listen = [

'illuminate.query' => [

QueryListener::class,

],

];

Laravel 5.2、5.3、5.4版本:打开 app/Providers/EventServiceProvider.php,在 $listen 中添加 Illuminate\Database\Events\QueryExecuted 事件的监听器为 QueryListener

protected $listen = [

'Illuminate\Database\Events\QueryExecuted' => [

'App\Listeners\QueryListener',

],

];

0x03 编写SQL打印逻辑代码

Laravel 5.1版本

编辑app/Listeners/QueryListener.php文件/**

* 日志打印方法.

*

* @param illuminate.query $event

* @return void

*/

public function handle($sql, $params)

{

// 如果env中属于本地开发则进入该判断

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);

// dd($params);

\Log::info('SQL语句输出------------>'.call_user_func_array('sprintf', $params));

}

}

Laravel 5.2、5.3、5.4版本/**

* 日志打印方法.

*

* @param illuminate.query $event

* @return void

*/

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);

}

}

0x04 查看效果

打开storage/logs/laravel.log可查看到所有的SQL语句[2017-05-14 00:43:22] local.INFO: select count(*) as aggregate from `data_users` where `status` = '1'

[2017-05-14 00:43:22] local.INFO: select * from `data_users` where `status` = '1' order by `addtime` desc limit 10 offset 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值