Laravelで実行されているデータベースへのSQLクエリーを見たい

Posted in Laravel on 11月 02, 2016

Laravelのマニュアルにも記載されているのですが、Laravelで実行されているデータベースへの実際のSQLのクエリの中身を見てみたいという人もいるかと思います。

この記事ではそのような方に対して、SQLのクエリの確認手順と表示された内容の説明を行っています。

イベントサービスプロバイダーへのリスナーの登録

データベースへのSQLのクエリーを表示されるためには、イベントサービスプロバイダーへクエリーリスナーの登録を行います。

EventServiceProvider.php

public function boot()
    {
        parent::boot();

        DB::listen(function($query){

         var_dump($query->sql,$query->bindings,$query->time);

        });
    }

クエリーの確認

SQLのデータベースへのクエリーが発生するとvar_dumpにより、その内容が画面に表示されます。

middlewareでauth(認証)を行っているとアクセスするユーザが認証されているか確認する必要があります。そのため、ページにアクセスするたびにusersテーブルへのクエリーを行い、認証済みユーザかどうか確認しています。そのSQLのクエリーの中身が下記です。

string(52) "select * from `users` where `users`.`id` = ? limit 1" array(1) { [0]=> int(1) } float(0.77)

stringには、実行されたSQLのクエリー、arrayにはbinding情報、floatにはクエリーの実行時間がミリセカンドで表示されます。

実際のアプリケーションの中でitemsテーブルの行の詳細情報を確認したい場合は、下記のSQLを内部で実行してidが10である行の情報をitemsテーブルから取得しています。

string(44) "select * from `items` where `id` = ? limit 1" array(1) { [0]=> string(2) "10" } float(0.65)