メモ帳

読むな

Laravel でQueryBuilderで組み立てられたSQLを確認する方法

QueryBuilder(or Eloquent ORM)で組み立てたSQLを確認したい時に使う
いずれも tinker で実施

①QueryBulderから確認する場合

>>> App\Models\User::where('id', 1)->toSql()
=> "select * from `users` where `id` = ?"

②複数のQueryBuilderから確認したい場合

>>> DB::enableQueryLog()  # ログの出力をONにする
=> null
>>> App\Models\User::find(1) # SQLを確認したい処理分だけ実行する
=> App\Models\User {#370
     id: 1,
     name: "example",
     email: "example@example.com",
   }
>>> DB::getQueryLog() # 実施した分のSQLが出力される
=> [
     [
       "query" => "select * from `users` where `users`.`id` = ? limit 1",
       "bindings" => [
         1,
       ],
       "time" => 2.76,
     ],
   ]
>>> DB::flushQueryLog() # ログの中身を空にする

適当なタイミングで DB::flushQueryLog() をすればログの中身が空になる
毎回空にするのであれば dump(DB::getQueryLog()) && DB::flushQueryLog() を実行すれば出力と同時にログの中身も空にしてくれる

参考

qiita.com