PHP
Laravel
laravel5

Laravel5でSQLを確認する(お手軽版)


Query Builder を使った時にどんなSQLになるのか知りたい

ここでは開発中に簡単に確かめる方法を載せています。

じっくりとログに出力してSQL調整したいとかだったらこちらが参考になると思います。

Laravel5でSQLログを取る

laravel5.2 実行SQLのログを取る - web開発メモ


答え: toSql() を使う

APIドキュメントにありました。QueryBuilder::toSql()


以下はそのやり方です

$users = DB::table('users')

->where('status', '<>', 1)
->get();

という有効なユーザーのリストを取得する場合のSQLを確認するには

$sql = DB::table('users')

->where('status', '<>', 1)
->toSql();
var_dump($sql);

とします。

すると

string(44) "select * from `accounts` where `status` <> ?"

というような出力になります。

ここで気づくのはプレースホルダが ? のままということですが、 どんなSQLができるのか ということならこれでいいんじゃないでしょうか?


Eloquent ORMの場合も同じ

$sql = User::where('status', '<>', 1)

->toSql();
var_dump($sql);

となります。


プレースホルダの値も取得したい

プレースホルダの値は getBindings() で取得できます。

$query = DB::table('users')

->where('status', '<>', 1)
;
var_dump($query->toSql(), $query->getBindings());