Laravel Eloquent 显示查询日志
Posted
技术标签:
【中文标题】Laravel Eloquent 显示查询日志【英文标题】:Laravel Eloquent display query log 【发布时间】:2017-04-29 16:29:40 【问题描述】:use App\Order;
public function show(Order $order)
$data = $order->all();
return dd($order->getQueryLog());
有什么方法可以在 Laravel 中显示 Eloquent 构建的查询吗?
我试过getQueryLog();
但它不起作用
【问题讨论】:
How to get the query executed in Laravel 5 ? DB::getQueryLog returning empty array的可能重复 【参考方案1】:首先你必须启用查询日志 可以使用
DB::connection()->enableQueryLog();
那么你可以使用下面的代码来查看查询日志
$queries = DB::getQueryLog();
如果你想查看最后执行的查询
$last_query = end($queries);
要了解有关日志记录的更多信息,请参阅https://laravel.com/docs/5.0/database#query-logging
例子
public function show(Order $order)
\DB::connection()->enableQueryLog();
$data = $order->all();
$queries = \DB::getQueryLog();
return dd($queries);
【讨论】:
这仅用于数据库查询吗?我用的是eloquent,想看laravel的查询 它也适用于 eloquent,检查我在示例中显示的更新答案 哦我不知道我需要把 enableQueryLog();在我的查询之前,我把它放在后面大声笑,谢谢!【参考方案2】:要查看laravel.log
文件中的查询日志,您可以按如下方式进行。
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
);
);
// ...
【讨论】:
哇,我希望我在几年前就知道这一点。太有帮助了!谢谢。【参考方案3】:要使用getQueryLog()
,您需要先启用它:
DB::enableQueryLog();
DB::getQueryLog();
如果你想查看真实的查询,可以使用Laravel Debugbar,它将显示 Laravel 在当前请求期间创建的所有真实查询。
有时->toSql()
也很有用。
【讨论】:
【参考方案4】:在 5.6 上工作,在 AppServiceProvider::boot() 中是这样的
// 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.
);
然后在 config/app.php 中,这样就可以很容易地启用/禁用修改 .env
'log_sql' => env('LOG_SQL'),
所有感谢:https://arjunphp.com/laravel-5-5-log-eloquent-queries/
这可以解析为独特的查询:
grep ") sql:" laravel.log | sed -e "s#.*select\(.*\)\[\]#select\1#" | sort -u
【讨论】:
【参考方案5】:我知道这是一个老问题,但它可能会帮助其他有同样问题的人。
如果您使用默认连接以外的其他连接,则应指定它以正确获取查询日志。
\DB::connection('YourConnection')->enableQueryLog();
$test = MyModel::all();
$queries = \DB::connection('YourConnection')->getQueryLog();
dd($queries);
【讨论】:
【参考方案6】:在查询前写下 DB::enableQueryLog();
DB::enableQueryLog();
$data = $order->all();
$query = DB::getQueryLog();
dd($query);
【讨论】:
【参考方案7】:你可以使用这个包https://github.com/supliu/laravel-query-monitor
Após instalar, abra o terminal e execute o comando:
php artisan laravel-query-monitor
Eloquent 执行的所有查询都会实时显示
【讨论】:
【参考方案8】:查询执行
\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;
准确的方法
【讨论】:
【参考方案9】:您可以使用::toSql()
或->toSql()
,如下所示:
use App\Order;
public function show(Order $order)
return $order::toSql();
或者
use App\Order;
public function show(Order $order)
return $order::where("id", "<>", 0)->toSql();
您可能必须启用查询日志:
DB::enableQueryLog();
【讨论】:
【参考方案10】:你可以使用我的 Laravel 包,它可以在 Larave 6 和 7 中完美运行。(不确定 laravel 5 或更低版本。)
供使用 通过 composer 安装包: 通过以下命令
composer require dipenparmar12/laravel-query-log
重启服务器。 之后你会看到
storage/logs/db-query.log
包含您的查询日志的文件。
更多详情请访问Laravel-query-log
谢谢
【讨论】:
以上是关于Laravel Eloquent 显示查询日志的主要内容,如果未能解决你的问题,请参考以下文章
Laravel:在没有 Eloquent 的情况下在视图中显示数据
php [Eloquent CheatSheet] Eloquent #laravel #eloquent的常见查询方法