在多年的 Laravel 開發經驗中,小編整理了多種方法,幫助您查看 Laravel 執行的 SQL 查詢。希望其中一種適合您的需求。
方法一:使用 Laravel 的內建日誌系統
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 擴充套件
Laravel Debugbar 是一個流行的調試工具,它提供了一個易於使用的介面,用於查看各種調試資訊,包括 SQL 查詢。您可以使用 Composer 安裝 Debugbar:
composer require barryvdh/laravel-debugbar
然後,將 Barryvdh\Debugbar\ServiceProvider
添加到您的 config/app.php
的 providers
陣列中。之後,您可以在瀏覽器中查看每個請求的 SQL 查詢以及執行時間。
方法三:使用 Laravel Telescope
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 查詢:
1. 啟用 MySQL 的查詢日誌記錄功能
只需在 MySQL 的 my.cnf
檔案中添加以下程式碼,即可讓 MySQL 記錄所有執行的 SQL 查詢
:
# 記錄 SQL
general_log = 1
general_log_file = /var/log/mysql/general_sql.log
要使用這種方法,您需要具備對 MySQL 伺服器的權限並登錄到伺服器上。如果多人共享一台 MySQL 開發伺服器,最好不要啟用此功能,因為會引起混亂。此外,由於記錄包含大量資訊,很難確定哪些查詢是您的,因此建議在測試伺服器上使用,只在需要解決重要問題時才啟用。
2. 使用 PHPStorm 插件
PHPStorm 的插件市場提供了一個名為 MySQL Proxy 的插件,將程式碼中的資料庫配置更改為它代理的埠口,就能將所有的 SQL 記錄展示出來。這是小編目前使用的唯一方便的工具,不需要改動程式碼,不需要 MySQL 資料庫伺服器權限,並且檢索方便。
以上是一些查看在 Laravel 中執行的 SQL 查詢的方法。您可以選擇適合您專案和需求的方法來進行調試和監控資料庫查詢。
希望這篇文章對您有所幫助!如果您有任何問題或建議,請隨時留言告訴我們。
Top comments (0)