Eloquentで生成されたクエリを確認する
開発中に「ここで実行されているSQLを確認したいな」と思うことがありますよね
そういう時は
$eloquent->toSql();
が使えます。
単純な例を出すと、
User::where('user_id', 'A')->get();
のような実装で、クエリを確認したければ
User::where('user_id', 'A')->toSql();
とすればいいわけです
ただ、実際にログに出力されたSQLを確認すると
select user_id, user_name from users where user_id = ?
これだと、プレースホルダに何が入るのか、自分で確認しなければなりません
バインドされる値を取得する
プレースホルダーにバインドされる値は
$eloquent->getBindings();
で取得できます
配列形式でバインド値が取れるのでなかなかに便利です
例えば、
User::where('tall', '>', 150)->where('age', '>', 10)->get();
のようなクエリであれば
[150, 10]
が取得できるわけです。
クエリにパラメータをセットしたい
クエリとパラメータを個々に取得する方法はわかりましたが
手動でSQLを整形していくとなると、クエリが大きくなるにつれて
確認に要する時間が肥大化していきます
こういう単純な作業はプログラムにやらせましょう
プレースホルダーは「?」で統一されていますし
パラメータは配列で取得できます
それならfor文で置換できそうですよね
paiza.ioで手軽にプログラムが組める&シェアもしやすいので、使ってみてください
入力の1行目にクエリ
改行して2行目にパラメータをカンマ(,)区切りで張り付けて
実行ボタンを押せば置換後のクエリがコンソールに表示されます
![](https://paiza.io/assets/movie_title-aed88df2f448c0d69598876d1262bdc0.png)
Online editor and compiler
Paiza.IO is online editor and compiler. Java, Ruby, Python, PHP, Perl, Swift, JavaScript... You can use for learning pro...
ログの取り方
上記ツールを使う為に、クエリとパラメータを取得する必要があります
use Log;
Log::debug($query->toSql(), $query->getBindings());
を使うと、laravel.logにクエリとパラメータがセットで出力されます
これを先ほどのプログラムに入力してもらえば使えます。
楽をしながら正確に
どうせ同じことをやるなら、自分の作業負荷を下げて、尚且つ正確に進めたいですよね
今回ご紹介した置換プログラムはものすごく単純ですので、
パラメータの中にカンマが含まれたりするとバグります
その辺りはカスタマイズして使ってもらえればと思います
少しでもお役に立てれば幸いです