Laravel有非常强大的ORM,但是对于刚接触ORM的我来说,在理解上还是有点障碍的,开启打印SQL的功能能帮助更好的理解。
打印SQL默认是关闭的,需要在 /vendor/illuminate/database/Connection.php中打开。
protected $loggingQueries = true;
之后可在代码中使用了:
$res = User::where('id', 100)->first();
$log = DB::getQueryLog();
var_dump($log);
如果不想开启但需要临时查看,可以这样操作:
DB::connection()->enableQueryLog();
$res = User::where('id', 100)->first();
$log = DB::getQueryLog();
var_dump($log);
这样就这样。但是得到的语句与参数是分开的,不方便去观看以及使用。所以额外加了一个函数来处理这种情况。通常,我们会用到辅助函数类,可以放到这里。
function transSql($queries)
{
if(!$queries)
return FALSE;
$sqls = [];
foreach($queries as $query)
{
$sql = [
'sql' => vsprintf(str_replace('?', '%s', $query['query']), $query['bindings']),
'time' => $query['time']
];
$sqls[] = $sql;
}
return $sqls;
}
使用:
DB::connection()->enableQueryLog();
$res = User::where('id', 100)->first();
$log = DB::getQueryLog();
$log = transSql($log);
var_dump($log);
这里的sql语句可能不止一条,通过查看sql的条数,可以看到查询的详细情况。
相关
https://laravel-china.org/articles/5166/quick-print-laravel-database-query-sql-statement