平常正常调试代码时,总想知道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了
若有问题,可以反馈给我