129
112

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2016-09-15

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());
129
112
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
129
112

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?