[解決済み] Laravel5で実行されたクエリを取得する方法とは?DB::getQueryLog()が空の配列を返す
2022-04-24 14:27:51
質問
あるクエリのログを表示しようとしているのですが
DB::getQueryLog()
は空の配列を返すだけです。
$user = User::find(5);
print_r(DB::getQueryLog());
結果
Array
(
)
このクエリのログを見るにはどうしたらいいですか?
解決方法を教えてください。
Laravel 5では、デフォルトでクエリログが無効になっています。 https://github.com/laravel/framework/commit/e0abfe5c49d225567cb4dfd56df9ef05cc297448
を呼び出して、クエリログを有効にする必要があります。
DB::enableQueryLog();
// and then you can get query log
dd(DB::getQueryLog());
またはイベントリスナーを登録します。
DB::listen(
function ($sql, $bindings, $time) {
// $sql - select * from `ncv_users` where `ncv_users`.`id` = ? limit 1
// $bindings - [5]
// $time(in milliseconds) - 0.38
}
);
いくつかのヒント
1. 複数のDB接続
複数のDB接続がある場合、どの接続でログを取るかを指定する必要があります。
のクエリログを有効にするには
my_connection
:
DB::connection('my_connection')->enableQueryLog();
のクエリログを取得するには
my_connection
:
print_r(
DB::connection('my_connection')->getQueryLog()
);
2. クエリログを有効にする場所は?
HTTP リクエストのライフサイクルでは、 `BeforeAnyDbQueryMiddleware` [middleware][1] の `handle` メソッドでクエリログを有効にし、同じミドルウェアの [`terminate`][2] メソッドで実行したクエリを取得することが可能です。class BeforeAnyDbQueryMiddleware
{
public function handle($request, Closure $next)
{
DB::enableQueryLog();
return $next($request);
}
public function terminate($request, $response)
{
// Store or dump the log data...
dd(
DB::getQueryLog()
);
}
}
ミドルウェアのチェーンはartisanコマンドでは実行されないので、CLI実行の場合は
artisan.start
イベントリスナー
例えば
bootstrap/app.php
ファイル
$app['events']->listen('artisan.start', function(){
\DB::enableQueryLog();
});
3. メモリ
Laravelはすべてのクエリーをメモリ内に保持します。そのため、大量の行を挿入する場合や、多くのクエリを含むジョブを長時間実行する場合など、アプリケーションが過剰なメモリを使用することがあります。
ほとんどの場合、クエリログはデバッグのためにのみ必要であり、その場合は開発時のみ有効にすることをお勧めします。
if (App::environment('local')) {
// The environment is local
DB::enableQueryLog();
}
参考文献
関連
-
[解決済み】空の配列要素を削除する
-
[解決済み】警告: file_get_contents(): https:// ラッパーがサーバー構成ですべて無効になっています。
-
[解決済み] YouTube APIからYouTubeビデオのサムネイルを取得する方法を教えてください。
-
[解決済み] 配列の最初の要素を取得する
-
[解決済み] PHP 配列をキーではなく値で削除する
-
[解決済み] ELMAHをASP.NET MVCの[HandleError]属性で動作させる方法は?
-
[解決済み] PHP を使って配列が空かどうかを確認する方法は?
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み】(おそらく)連想配列の最初のキーを取得しますか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】move_uploaded_fileは、「failed to open stream: Permission denied" というエラーが出る
-
[解決済み] SQLSTATE[HY093]: 無効なパラメータ番号: バインドされた変数の数が102行目のトークンの数と一致しない [終了]
-
[解決済み】「Fatal error: Class 'MySQLi' not found "を解決するには?
-
[解決済み】PHPからPythonスクリプトを実行する
-
[解決済み】未定義のメソッド mysqli_stmt::get_result を呼び出す。
-
[解決済み】MySQLのカラム数が1行目の値数と一致しない【非公開
-
[解決済み] PHP と mod_fcgid: handle_request_ipc 関数で ap_pass_brigade が失敗する。
-
[解決済み] SSLエラー SSL3_GET_SERVER_CERTIFICATE:証明書の検証に失敗しました。
-
[解決済み] クエリビルダーのSQLクエリを文字列として出力するにはどうすればよいですか?
-
[解決済み] Laravelで実行されたクエリを取得する 3/4