在AppServiceProvider.php中的boot方法中新增如下程式碼 即可
public function boot()
{
\DB::listen(function($query) {
$tmp = str_replace('?', '"'.'%s'.'"', $query->sql);
$tmp = vsprintf($tmp, $query->bindings);
$tmp = str_replace("\\","",$tmp);
\Log::info(' execution time: '.$query->time.'ms; '.$tmp."\n\n\t");
});
}
執行原生 SQL 查詢 使用 ? 繫結引數時上邊是可行的 但是使用命名繫結引數時引數沒有填充到語句中
下邊的解決了使用命名繫結 引數沒有填充到sql語句的問題
\DB::listen(function ($query) {
$tmp = str_replace('?', '"'.'%s'.'"', $query->sql);
$qBindings = [];
foreach ($query->bindings as $key => $value) {
if (is_numeric($key)) {
$qBindings[] = $value;
} else {
$tmp = str_replace(':'.$key, '"'.$value.'"', $tmp);
}
}
$tmp = vsprintf($tmp, $qBindings);
$tmp = str_replace("\\", "", $tmp);
\Log::info(' execution time: '.$query->time.'ms; '.$tmp."\n\n\t");
}
);
執行與資料庫相關的操作會在 storage\logs\laravel.log 檔案中看到記錄執行的sql語句
(5.1版本 請看回復區)
本作品採用《CC 協議》,轉載必須註明作者和本文連結