Query Builder を使った時にどんなSQLになるのか知りたい
[2020-07-30 追記]
最新のLaravel 7.x でもこの方法が使えることを確認しました。
[/2020-07-30 追記]
ここでは開発中に簡単に確かめる方法を載せています。
じっくりとログに出力して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());