Laravel5.* 打印出执行的sql语句的方法
本文介绍了Laravel5.*打印出执行的sql语句的方法,分享给大家,具体如下:
打开app\Providers\AppServiceProvider.PHP,在boot方法中添加如下内容
5.2以下版本
//先引入DB
useDB;
//或者直接使用\DB::
DB::listen(function($sql,$bindings,$time){
dump($sql);
});
5.2及以上版本
useDB;
//或者直接使用\DB::
//只能接受一个参数
QueryExecuted{#84▼
+sql:"select*from`posts`where`slug`=?limit1"
+bindings:array:1[▶]
+time:0.59
+connection:MySqlConnection{#85▶}
+connectionName:"mysql"
}
DB::listen(function($sql){
dump($sql);
//echo$sql->sql;
//dump($sql->bindings);
});
//如果要放入日志文件中
DB::listen(
function($sql){
//$sqlisanobjectwiththeproperties:
//sql:Thequery
//bindings:thesqlqueryvariables
//time:Theexecutiontimeforthequery
//connectionName:Thenameoftheconnection
//Tosavetheexecutedqueriestofile:
//Processthesqlandthebindings:
foreach($sql->bindingsas$i=>$binding){
if($bindinginstanceof\DateTime){
$sql->bindings[$i]=$binding->format('\'Y-m-dH:i:s\'');
}else{
if(is_string($binding)){
$sql->bindings[$i]="'$binding'";
}
}
}
//Insertbindingsintoquery
$query=str_replace(array('%','?'),array('%%','%s'),$sql->sql);
$query=vsprintf($query,$sql->bindings);
//Savethequerytofile
$logFile=fopen(
storage_path('logs'.DIRECTORY_SEPARATOR.date('Y-m-d').'_query.log'),
'a+'
);
fwrite($logFile,date('Y-m-dH:i:s').':'.$query.PHP_EOL);
fclose($logFile);
}
);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。