クエリビルダのクエリを見たい
User::select('*')->where('id', '>', 3);
こんな感じのクエリビルダで、実際に走るSQLを見たい。
toSql()
User::select('*')->where('id', '>', 3)->toSql();
これで、実際のSQLが見れる。
select * where id > ?
あれ?この ?
ってなに? 3
ってどこにいった?
?はプレースホルダ
これは、SQLを書くときによく使われる手法で、
SQLインジェクションなど、サーバーに攻撃してくるものを防ぐために、
SQLに直接値を入れるのではなく、
?に向かって代入をすることで、アタックされるのを防ぐ手法。
SQLインジェクションやプレースホルダについての詳細はここでは省略。
問題は、このままだと代入すべき 3
がないじゃんというお話。
getBindings()
User::select('*')->where('id', '>', 3)->getBindings();
これで、配列で3が入っているのがわかる。
Laravelの元コードを読んでいくと、これらを組み合わせてSQLが走っているのがわかりますね!