Php Laravel雄辩地显示查询日志
有没有办法显示由Elount在Laravel中构建的查询 我尝试了Php Laravel雄辩地显示查询日志,php,laravel,Php,Laravel,有没有办法显示由Elount在Laravel中构建的查询 我尝试了getQueryLog()但它不起作用要使用getQueryLog()您需要首先启用它: use App\Order; public function show(Order $order) { $data = $order->all(); return dd($order->getQueryLog()); 如果您想查看真实查询,可以使用,它将显示在当前请求期间创建的所有真实查询 有时->toSql
getQueryLog()
但它不起作用要使用getQueryLog()
您需要首先启用它:
use App\Order;
public function show(Order $order) {
$data = $order->all();
return dd($order->getQueryLog());
如果您想查看真实查询,可以使用,它将显示在当前请求期间创建的所有真实查询
有时
->toSql()
也很有用。首先必须启用查询日志
可以使用
DB::enableQueryLog();
DB::getQueryLog();
然后您可以使用下面的代码查看查询日志
DB::connection()->enableQueryLog();
如果要查看最后执行的查询
$queries = DB::getQueryLog();
要了解有关日志记录的更多信息,请参阅
范例
$last_query = end($queries);
我知道这是一个老生常谈的问题,但它可能会帮助其他与我有同样问题的人 如果使用默认连接以外的其他连接,则应指定该连接以正确获取查询日志
public function show(Order $order){
\DB::connection()->enableQueryLog();
$data = $order->all();
$queries = \DB::getQueryLog();
return dd($queries);
}
使用5.6,类似于AppServiceProvider::boot()中的内容 然后在config/app.php中,这样就可以很容易地启用/禁用对.env的修改
// Log all DB SELECT statements
// @codeCoverageIgnoreStart
if (!app()->environment('testing') && config('app.log_sql')) {
DB::listen(function ($query) {
if (preg_match('/^select/', $query->sql)) {
Log::info('sql: ' . $query->sql);
// Also available are $query->bindings and $query->time.
}
});
}
全部归功于:
这可以通过以下方式解析为唯一查询:
'log_sql' => env('LOG_SQL'),
您可以使用::toSql()
或->toSql()
,如下所示:
grep ") sql:" laravel.log | sed -e "s#.*select\(.*\)\[\]#select\1#" | sort -u
或
要查看
laravel.log
文件中的查询日志,请使用以下方法
DB::enableQueryLog();
您可以使用我的Laravel软件包,该软件包在Larave 6和7中运行良好。(不确定laravel 5或更低。) 供使用 通过以下命令通过composer:安装软件包
composer需要dipenparmar12/laravel查询日志
重新启动服务器。
之后你会看到
存储/logs/db query.log
包含查询日志的文件
欲了解更多详情,请访问
谢谢您可以使用此软件包
Após instalar,abra o terminal e execute o comando:
namespace App\Providers;
use DB;
use Log;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
DB::listen(function($query) {
Log::info(
$query->sql,
$query->bindings,
$query->time
);
});
}
// ...
}
Eloquent执行的所有查询都将实时显示在查询DB::enableQueryLog()之前写入此命令 查询执行
DB::enableQueryLog();
$data = $order->all();
$query = DB::getQueryLog();
dd($query);
质疑
输出
StaffRegister::all();
完整结构
[2021-03-14 08:00:57] local.DEBUG: query : select * from `staff_registers`
[2021-03-14 08:00:57] local.DEBUG: time 0.93
[2021-03-14 08:00:57] local.DEBUG: connection mysql
这是否仅用于数据库查询?我正在使用eloquent,我想看看laravel的queryit也适用于eloquent,检查我在示例中显示的更新答案哦,我不知道我需要使用enableQueryLog();在我提问之前,我把它放在了后面,哈哈,谢谢!很高兴能帮助你,接受这个答案,这样对其他人也可能有用。可能是魔兽世界的复制品,我希望我在几年前就知道了。太有用了!谢谢
php artisan laravel-query-monitor
DB::enableQueryLog();
$data = $order->all();
$query = DB::getQueryLog();
dd($query);
\Event::listen('Illuminate\Database\Events\QueryExecuted', function ($query) {
$sql = $query->sql;
$time = $query->time;
$connection = $query->connection->getName();
Log::debug('query : '.$sql);
Log::debug('time '.$time);
Log::debug('connection '.$connection);
});
StaffRegister::all();
[2021-03-14 08:00:57] local.DEBUG: query : select * from `staff_registers`
[2021-03-14 08:00:57] local.DEBUG: time 0.93
[2021-03-14 08:00:57] local.DEBUG: connection mysql
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Log;
use App\Models\StaffRegister;
class AuthController extends Controller
{
public function index(){
\Event::listen('Illuminate\Database\Events\QueryExecuted', function ($query) {
$sql = $query->sql;
$time = $query->time;
$connection = $query->connection->getName();
Log::debug('query : '.$sql);
Log::debug('time '.$time);
Log::debug('connection '.$connection);
});
$obj = StaffRegister::all();
return $obj;
}
}