【Laravel】SQLログのプレースホルダーにパッとパラメータを充てる

Larval
スポンサーリンク

Eloquentで生成されたクエリを確認する

開発中に「ここで実行されているSQLを確認したいなー」って思うことってたまーにありますよね。

そういう時は

$eloquent->toSql();

が使えます。
単純な例を出すと、

User::where('user_id', 'A')->get();

のような実装で、クエリを確認したければ

User::where('user_id', 'A')->toSql();

とすればいいわけです。

でも、 Log::debug($query->toSql()); ってな具合でログに出力すると、

select user_id, user_name from users where user_id = ?

という感じでログが出力されます。
これだと、プレースホルダに何が入るのか、自分で確認しなければなりません。。。

バインドされる値を取得する

プレースホルダーにバインドされる値は

$eloquent->getBindings();

で取得できます。
配列形式でバインド値が取れるのでなかなかに便利です。

例えば、

User::where('tall', '>', 150)->where('age', '>', 10)->get();

のようなクエリであれば

[150, 10]

が取得できるわけです。

クエリとパラメータを合体させたい

クエリとパラメータを個々に取得する方法はわかりましたが、クエリが大きくなるにつれて
確認に要する時間が肥大化していきます。手でパラメータを充て込んでいたら。。。

こういう単純な作業はプログラムにやらせましょう!

プレースホルダーは?で統一されているし、パラメータは配列で取得できるし!
それならfor文で置換してしまえばイイ

paizaで手軽にプログラムが組める&シェアもしやすいので、使ってみてください
入力の1行目にクエリ
改行して2行目にパラメータをカンマ(,)区切りで張り付けて
実行ボタンを押せば置換後のクエリがコンソールに表示されます。

Online editor and compiler
Paiza.IO is online editor and compiler. Java, Ruby, Python, PHP, Perl, Swift, JavaScript... You can use for learning programming, scraping web sites, or writing...

ログの取り方

上記ツールを使う為に、クエリとパラメータを取得する必要がありますね。

Log::debug($query->toSql(), $query->getBindings());

を使うと、laravel.logにクエリとパラメータがセットで出力されます。これを先ほどのプログラムに入力してもらえば使えます。

楽をしながら正確に

どうせ同じことをやるなら、自分の作業負荷を下げて、尚且つ正確に進めたいですよね。

今回ご紹介した置換プログラムはものすごく単純ですので、
パラメータの中にカンマが含まれたりするとバグります。

その辺りはカスタマイズして使ってもらえればと思います!
少しでもお役に立てれば幸いですー。

LarvalPHP
スポンサーリンク
HABATAKIブログ@翔