laravelで実際に実行されるsqlクエリを確認する方法

製作 プログラム

最終更新日:2020/01/17

ラムネグから一言:寝る前に読むとくだらなすぎて逆に寝れると好評なすごい適当なブログをこっちではじめてます.

laravelでクエリ確認

laravelを使っていると、laravelが便利なクエリビルダーを用意してくれているので、自分でsqlクエリを書くことってなかなかないですよね。

でもそんな風にブラックボックス化されているからこそ、本当はどんなクエリになっているのか気になるもの。

それに書き方が悪いせいでものすごく処理が遅いクエリになっちゃってたらイヤですし、やっぱり一度はきちんと確認しておきたいところです。

今回はlaravelで実際のクエリを確認する方法を2つ紹介します。

  1. laravelでクエリ確認
  2. ①toSql()を使う
  3. ②getQueryLogを使う
  4. getQueryLogの実行時間について
  5. まとめ

①toSql()を使う

最初は情報は少ないですが簡単にクエリが確認できる「toSql()」を使う方法から。

laravelのクエリビルダーを使うとこんな感じになっていると思います。

$user = \User::where('mail', 'xxxx@yyyy.com')->get();

この最後のget()だったりfirst()をtoSql()に変えるだけ!

そしてdd()というデバッグ用の関数にその結果を入れてあげれば、どんなクエリができているのかすぐに確認できます。

$user = \User::where('mail', 'xxxx@yyyy.com')->toSql(); dd($user);

②getQueryLogを使う

toSql()はすぐに見れる分、クエリしか確認できません。

例えば実行時間が知りたい場合とかは「getQueryLog」を使う方法がおすすめです。

getQueryLogの使い方

\DB::enableQueryLog();
$user = \User::where('mail', 'xxxx@yyyy.com')->toSql();
dd(\DB::getQueryLog());

これでクエリと共に実行時間なども表示することができます。

大事なのは実際にクエリビルダーを書いている所より上で「enableQueryLog()」を読んでおくところ!そしてクエリビルダーの記述が終わった所で、またまたデバッグ用関数のdd()にgetQueryLogの結果を入れこんでいます。

getQueryLogの実行時間について

getQueryLogだと実行時間も表示されるんですが、単位が書いてません。

ミリ秒なの?秒なの?とわかりづらいですが、getQueryLogの結果で出てくる実行時間は「ミリ秒」です。

例えば実行時間が「time => 29.4」と出ていているなら0.0294秒という事です。

まとめ

今回はlaravelで実際に作成されるクエリの確認方法(toSqlとgetQueryLog)2つと、また、getQueryLogで表示される実行時間の単位についてもおまけで紹介しました。

一度見てみるとさらにlaravelが身近に感じられるので一度やってみてくださいね!

【おしらせ、というか完全なる宣伝】

文体がもうぜんぜん適当すぎてあれだけどものすごい自由に書いてるブログ「檸檬だくだく」もよろしく.寝る前に読める恐ろしくくだらないやつです.

こんなにも一ミリも目を引かれないタイトルを取り扱ってます: ココア20g / ハイチュウとかってさ / なぜ米と小麦を食べようと思ったのかの謎 /