Write the Code. Change the World.

10月 09

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