laravelで実行されたSQL文を出力する方法(2つの方法)

PHPz
リリース: 2023-04-09 09:30:01
オリジナル
6033 人が閲覧しました

Eloquent ORM を使用して Laravel でデータベースにクエリを実行するのは一般的ですが、複雑なクエリ要件に直面した場合は、実行された SQL ステートメントを表示してデバッグする必要があります。では、実行された SQL ステートメントを出力するにはどうすればよいでしょうか?

Laravel は、実行された SQL ステートメントを出力する 2 つの方法を提供します。1 つはログ出力を使用する方法、もう 1 つはイベント リスナーの出力を使用する方法です。

ログ出力による

Laravel のログ出力を通じて SQL ステートメントを実行するのが最も便利な方法であり、各環境に対応するログの記録方法と表示方法があります。

設定ファイルで SQL ステートメントのログをオンにすることができます:

// 在config/database.php文件中,找到default下的connections数组,增加以下选项: 'log_queries' => true, // 开启SQL日志记录 'log_channel' => 'daily', // 日志存储方式,也可使用syslog、errorlog等方式 'log_level' => 'debug', // 日志级别
ログイン後にコピー

log_queries オプションを追加すると、Laravel は実行された SQL ステートメントを自動的に記録し、ログはstorage/logs ディレクトリ。

コード内のクエリ ステートメントを実行した後、次の方法で SQL ステートメントを出力できます。

DB::enableQueryLog(); // 执行查询语句 $users = DB::table('users')->get(); // 获取执行的SQL语句 $sql = DB::getQueryLog()[0]['query'];
ログイン後にコピー

上記のコードでは、まず DB::enableQueryLog() メソッドを呼び出して有効にします。 SQL ステートメントの記録 、クエリの実行後、DB::getQueryLog() メソッドを通じて実行されたすべての SQL ステートメントを取得できます。最後の SQL ステートメントを取得したい場合は、DB::getLastQuery() メソッドを使用することもできます。 。

ただし、本番環境でこの方法を使用して大量の SQL ステートメントを記録すると、ログの量が増加し、システムのメンテナンスやトラブルシューティングに役立たないことに注意してください。運用環境で SQL ステートメントを頻繁に記録するステートメント ログ。

イベント リスナーを介して

Laravel は SQL 実行イベントをリッスンする方法を提供します。開発者は SQL 実行イベントをリッスンすることで SQL ステートメントを出力できます。この方法はより安全で信頼性が高く、運用環境で使用される環境では、大量のログが生成されます。

リスナーを定義すると、クエリ ステートメントの実行時に、対応する SQL ステートメントを出力できます。実装コードは次のとおりです。

// 在AppServiceProvider的boot方法中,添加以下代码 use Illuminate\Support\Facades\DB; use Illuminate\Database\Events\QueryExecuted; use Log; // 注册SQL执行监听器 DB::listen(function (QueryExecuted $queryExecuted) { $sql = str_replace("?", "'%s'", $queryExecuted->sql); $bindings = $queryExecuted->connection->prepareBindings($queryExecuted->bindings); $fullSql = vsprintf($sql, $bindings); Log::debug('SQL:'.$fullSql); });
ログイン後にコピー

上記のコードでは、DB::listen() を使用して、クエリ ステートメントが実行されるとトリガーされるイベント リスナーを登録します。

リスナーでは、現在のクエリの SQL ステートメントと関連するバインディング パラメーターおよびその他の情報が QueryExecuted イベントを通じて取得され、Log::debug() メソッドを通じてログに出力されます。

上記の 2 つの方法により、Laravel で SQL ステートメントを出力するという目的を達成しました。これにより、デバッグとトラブルシューティングがより便利になり、開発においてかけがえのない役割を果たします。

以上がlaravelで実行されたSQL文を出力する方法(2つの方法)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!