[Laravel] DB::pretend()、DB::enableQueryLog() を使って、実行前SQLを取得する

2018年9月6日ITLaravel

Laravel Debugbar を使えば、実行「後」の SQL は容易に確認できるのですが、実行「前」に生成された SQL を取得したかったので、調べていたら、ありました。

便利ですね〜

DB ファサードの pretend メソッドを使います。

こう書けば、、、

$sql = DB::pretend(function()
{
    User::all();
});

dd($sql);

こう確認でき、、、

laravel-db-pretend1.png

こう書けば、、、(again)

$sql = DB::pretend(function()
{
    DB::select('select * from users where name = ?', ['hoge']);
});

dd($sql);

こう確認できます。

laravel-db-pretend2.png

バインディングしてる値、実行時間も確認できるみたいですね。

他の書き方もあるようでして、、

DB::enableQueryLog();
$users = User::all();
dd(DB::getQueryLog());

こちらだと、、、time が 3.39、、、だと!?

laravel-db-pretend3.png

DB::enableQueryLog() を利用すると、実行時間が長いですね。

検証してる限り、そんなに実行時間に差分があるようには感じませんでしたが、、、実際に DB に流される SQL を知ることが今回の目的なので、これ以上の深追いは今回は辞めとこうと思います。

スポンサーリンク

Posted by nobuhiro harada