给定以下代码:

DB::table('users')->get();

我想得到上面的数据库查询生成器将生成的原始SQL查询字符串。在本例中,它将是SELECT*FROM用户。

我该怎么做?


当前回答

使用debugbar包

composer require "barryvdh/laravel-debugbar": "2.3.*"

其他回答

我通过监听查询日志并附加到日志数组来实现:

//create query
$query=DB::table(...)...->where(...)...->orderBy(...)...
$log=[];//array of log lines
...
//invoked on query execution if query log is enabled
DB::listen(function ($query)use(&$log){
    $log[]=$query;//enqueue query data to logs
});
//enable query log
DB::enableQueryLog();
$res=$query->get();//execute

打印上次查询

DB::enableQueryLog();

$query        = DB::getQueryLog();
$lastQuery    = end($query);
print_r($lastQuery);

有一种获取查询字符串的方法。

到SQL()

在我们的情况下,

 DB::table('users')->toSql(); 

回来

select * from users

是返回SQL查询字符串的确切解决方案。。希望这有帮助。。。

使用debugbar包

composer require "barryvdh/laravel-debugbar": "2.3.*"

从Laravel 5.8.15开始,查询生成器现在有dd和dump方法

DB::table('data')->where('a', 1)->dump();