Laravel7 発行されるSQLのいろいろな確認方法

toSql()

$members = Member::where('id', '=', 1)
    ->orderBy('seq', 'ASC');
dd($members->toSql());

  ↓

"select * from `facilities` where `id` = ? order by `seq` asc"

発行されるSQLの確認出来るけど、バインド変数は確認できない。

dd()

$members = Member::where('id', '=', 1)
    ->orderBy('seq', 'ASC')
    ->dd();

  ↓

"select * from `facilities` where `id` = ? order by `seq` asc"
array:1 [▼
  0 => 1
]

SQLとバインド変数の値を確認することができる。
ちなみにバインド変数のみ確認したい場合は、getBindings()で確認することができる。

dd($members->getBindings());

  ↓

array:1 [▼
  0 => 1
]

dump()

$members = Member::where('id', '=', 1)
    ->orderBy('seq', 'ASC');
dd($members->dump());

  ↓

"select * from `members` where `id` = ? order by `seq` asc"
array:1 [▼
  0 => 1
]
Illuminate\Database\Query\Builder {#1335 ▼
  +connection: Illuminate\Database\MySqlConnection {#337 ▶}
  +grammar: Illuminate\Database\Query\Grammars\MySqlGrammar {#338 ▶}
  +processor: Illuminate\Database\Query\Processors\MySqlProcessor {#339}
  +bindings: array:9 [▶]
  +aggregate: null
  +columns: null
  +distinct: false
  +from: "members"
  +joins: null
  +wheres: array:1 [▶]
  +groups: null
  +havings: null
  +orders: array:1 [▶]
  +limit: null
  +offset: null
  +unions: null
  +unionLimit: null
  +unionOffset: null
  +unionOrders: null
  +lock: null
  +operators: array:30 [▶]
  +useWritePdo: false
}

SQLとバインド変数、クエリの構成要素まで確認できる。

dd()とdump()

ちなみに今までの解説はモデルメソッドのdd()とdump()だけど
モデルメソッドではないdd()とdump()を使い分けるとデバッグの効率が上がる。

dd(変数)
パラメータで与えられた変数の中身を表示して処理を中断する。

dump()変数
パラメータで与えられた変数の中身を表示するがそのまま処理は継続する

複雑なSQLになると、思った通りのSQLがクエリビルダで書けているかを上手に確認しながら進めないと効率がとても悪くなってしまう。

個人的には、以下の1行がSQLとバインド変数、結果セットまで確認できて更に処理も継続するから好き。

dump($members->dump(), $members->get());

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です