平常正常调试代码时,总想知道mysq执行了一些什么,这样比较稳妥一些
网上有一个版本,貌似遇到like语句,加上%号后,就会报这个错
ErrorException
vsprintf(): Too few arguments
所以我改良了一个版本,代码如下
if (app()->isLocal()) { | |
DB::listen(function ($query) { | |
$sql = $query->sql; | |
foreach ($query->bindings as $key => $value) { | |
if (is_numeric($key)) { | |
if (is_numeric($value)) { | |
$sql = preg_replace('/\?/', $value, $sql, 1); | |
} else { | |
$sql = preg_replace('/\?/', sprintf('\'%s\'', $value), $sql, 1); | |
} | |
} else { | |
if (is_numeric($value)) { | |
$sql = str_replace(':' . $key, $value, $sql); | |
} else { | |
$sql = str_replace(':' . $key, sprintf('\'%s\'', $value), $sql); | |
} | |
} | |
} | |
$sql = str_replace('\\', '', $sql); | |
Log::info(' run-time: ' . $query->time . 'ms; ' . $sql . "\n\n\t"); | |
}); | |
} |
把以上代码拷贝到AppServiceProvider.php里,就可以在storage/logs/laravel.log里看到执行的所有sql了
若有问题,可以反馈给我