给定以下代码:
DB::table('users')->get();
我想得到上面的数据库查询生成器将生成的原始SQL查询字符串。在本例中,它将是SELECT*FROM用户。
我该怎么做?
给定以下代码:
DB::table('users')->get();
我想得到上面的数据库查询生成器将生成的原始SQL查询字符串。在本例中,它将是SELECT*FROM用户。
我该怎么做?
当前回答
$data = User::toSql();
echo $data; //this will retrun select * from users. //here User is model
其他回答
打印上次查询
DB::enableQueryLog();
$query = DB::getQueryLog();
$lastQuery = end($query);
print_r($lastQuery);
要将上次运行的查询输出到屏幕,可以使用以下命令:
\DB::enableQueryLog(); // Enable query log
// Your Eloquent query executed by using get()
dd(\DB::getQueryLog()); // Show results of log
我相信最近的查询将位于阵列的底部。
你会得到这样的东西:
array(1) {
[0]=>
array(3) {
["query"]=>
string(21) "select * from "users""
["bindings"]=>
array(0) {
}
["time"]=>
string(4) "0.92"
}
}
(感谢约书亚在下面的评论。)
您可以收听“illumination.query”事件。在查询之前,添加以下事件侦听器:
Event::listen('illuminate.query', function($query, $params, $time, $conn)
{
dd(array($query, $params, $time, $conn));
});
DB::table('users')->get();
这将打印出如下内容:
array(4) {
[0]=>
string(21) "select * from "users""
[1]=>
array(0) {
}
[2]=>
string(4) "0.94"
[3]=>
string(6) "sqlite"
}
$data = User::toSql();
echo $data; //this will retrun select * from users. //here User is model
第一种方式:
只需使用toSql()方法,
$query = DB::table('users')->get();
echo $query->toSql();
如果它不起作用,你可以从laravel文档中设置它。
第二种方式:
另一种方法是
数据库::getQueryLog()
但是如果它返回一个空数组,那么默认情况下它被禁用,
只需使用DB::enableQueryLog()启用即可:)
有关更多信息,请访问Github Issue了解更多信息。
希望有帮助:)