laravel打印sql语句

引言

很多同学刚接触laravel不久对ORM操作有点不自信,无法判断自己写的ORM语句是否正确,这个时候需要将ORM的原生语句打印出来了,这里总结几种方法和大家学习探讨。也是自己做的一个小备份

ROM 调用 toSql

此方法仅支select

1
2
3
dd(self::where('id', 1)->toSql());
输出
"select * from `zjj_articles` where `id` = ?"

用DB自己带QueryLog记录

此方法仅支select

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  DB::connection()->enableQueryLog();
$db = self::all()
->load('joinTgas')
->where('joinTgas.tid', '=', '1');
dd(DB::getQueryLog());

输出

array:2 [
0 => array:3 [
"query" => "select * from `zjj_articles`"
"bindings" => []
"time" => 309.03
]
1 => array:3 [
"query" => "select * from `zjj_tags` where `zjj_tags`.`aid` in (?, ?, ?)"
"bindings" => array:3 [
0 => 6030
1 => 6031
2 => 6032
]
"time" => 59.44
]
]

DB监听事件

此方法支持 insert, update, delete, select基本所有语句

1
2
3
4
5
6
7
8
9
10
// 在需要打印SQL的语句前添加监听事件。
DB::listen(function ($query) {
$bindings = $query->bindings;
$sql = $query->sql;
foreach ($bindings as $replace) {
$value = is_numeric($replace) ? $replace : "'".$replace."'";
$sql = preg_replace('/\?/', $value, $sql, 1);
}
print_r($sql.PHP_EOL);
});

一个好用的工具 laravel-debugbar

github地址

github链接

安装

1
2
composer require barryvdh/laravel-debugbar --dev

APP_DEBUG=true

效果

好了看下最后的效果吧

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~