はじめに
laravelのクエリビルダを使って副問い合わせをしたかったのですが、
方法が最初わからなかったので備忘録という意味でも記事にします。
クエリビルダ例
①SQLを発行する。
・toSql()を使用すると実際のSQLが発行されます。
【クエリビルダ(SQL発行)】
$testSql = DB::table(‘テーブル名’)
->select(‘テーブル名.test_id’, ‘テーブル名.test_name’)
->where(‘テーブル名.test_id’, ‘=’, ‘:test_id’) ->toSql();
【実際のSQL】
SELECT テーブル名.test_id, テーブル名.test_name
FROM テーブル名
WHERE テーブル名.test_id = ?
②クエリビルダで①を使って副問い合わせをする
・「DB::table(テーブル名)」のテーブル名部分に「DB::raw」を使用して発行したSQLの変数を指定してあげる。
・setBindingsを使用してSQLの「?」部分に値を安全に入れる必要があります。
【クエリビルダ】
DB::table(DB::raw(‘(‘.$testSql .’) AS test’))
->leftJoin(‘hoge’, ‘hoge.id’, ‘=’, ‘test.hoge_id’)
->setBindings([‘:test_id’=>$test_id])
->get();
まとめ
toSqlを使用し、発行したSQLを使ってクエリビルダを書くと副問い合わせができるという紹介になります。
これからもLaravelの勉強していきたいと思います。