Laravel 提供了强大的日志系统,您可以使用 DB::listen
方法监听数据库查询事件并将查询日志记录到日志文件中。要使用这种方法,您可以在 AppServiceProvider
的 boot
方法中添加以下代码:
use Illuminate\Support\Facades\DB;
public function boot()
{
DB::listen(function ($query) {
\Log::info($query->sql, ['bindings' => $query->bindings, 'time' => $query->time]);
});
}
这将把每个执行的 SQL 查询记录到日志文件中,包括查询语句、绑定的参数和执行时间。
Laravel Debugbar 是一个流行的调试工具,它提供了一个易于使用的界面,用于查看各种调试信息,包括 SQL 查询。您可以使用 Composer 安装 Debugbar:
composer require barryvdh/laravel-debugbar
然后,将 Barryvdh\Debugbar\ServiceProvider
添加到您的 config/app.php
的 providers
数组中。之后,您可以在浏览器中查看每个请求的 SQL 查询以及执行时间。
Laravel Telescope 是 Laravel 官方提供的一个调试和监控工具,它允许您查看应用程序执行的各种操作,包括 SQL 查询。您可以使用 Composer 安装 Telescope:
composer require laravel/telescope
然后,运行 Telescope 的安装命令并执行迁移:
php artisan telescope:install
php artisan migrate
启用 Telescope 后,您可以在 /telescope
路径下访问它的仪表板来查看 SQL 查询和其他有用的调试信息。
DB::getQueryLog
方法您可以在代码中使用 DB::getQueryLog
方法来获取当前请求中执行的所有 SQL 查询。例如:
DB::enableQueryLog();
// 执行一些查询操作
$queries = DB::getQueryLog();
这将返回一个数组,其中包含了执行的所有 SQL 查询。
toSql()
方法toSql
方法可以将一个查询构建器实例转换为对应的 SQL 语句,但是它不会执行这条 SQL 语句。这个方法主要用于调试目的。
$query = DB::table('users')->where('votes', '>', 100)->toSql();
这个 $query
变量现在包含了对应的 SQL 语句,但是这个 SQL 语句并没有被执行。
如果您不想修改代码,以下两种方法可以帮助您查看 SQL 查询:
只需在 MySQL 的 my.cnf
文件中添加以下代码,即可让 MySQL 记录所有执行的 SQL 查询:
# 记录 SQL
general_log = 1
general_log_file = /var/log/mysql/general_sql.log
要使用这种方法,您需要具备对 MySQL 服务器的权限并登录到服务器上。如果多人共享一台 MySQL 开发服务器,最好不要启用此功能,因为会引起混乱。此外,由于日志包含大量信息,很难确定哪些查询是您的,因此建议在测试服务器上使用,只在需要解决重要问题时才启用。
PHPStorm 的插件市场提供了一个名为 MySQL Proxy 的插件,将代码里的数据库配置更改为它代理的端口,就能将所有的 SQL 日志展示出来。这是小编目前使用的唯一顺手的工具,不需要改动代码,不需要 MySQL 数据库服务器权限,并且检索方便。
以上是一些查看在 Laravel 中执行的 SQL 查询的方法。您可以选择适合您项目和需求的方法来进行调试和监控数据库查询。
希望这篇文章对您有所帮助!如果您有任何问题或建议,请随时留言告诉我们。