2018/10/12
Laravel で DB を操作するとき、よくクエリービルダーを使ってクエリを発行します。
開発を進めていくにあって、実際に実行される SQL の内容を確認したいことってよくあります。
そんなときに利用するのが toSqlメソッド です。
今回は Laravel での SQL の確認の仕方についてエントリーします。
toSqlメソッドの使い方
例)「users」テーブルの "男性" のユーザー一覧を取得
クエリービルダーを使ってデータの一覧を取得するときはgetメソッドを使用していました。
$users = DB::table('users') ->where('gender', '男性') ->get();
このgetメソッドのかわりにtoSqlメソッドを使います。
$users = DB::table('users') ->where('gender', '男性') ->toSql();
最後に var_dump で出力します。
$users = DB::table('users') ->where('gender', '男性') ->toSql(); var_dump($users);
var_dump は変数の情報を表示する関数です。
配列やオブジェクトにも使用することができます。
エラーが起きても何が間違っているのか気付きにくいので、var_dumpを使ってエラーの箇所を探します。
var_dump は以下のように記述します。
var_dump(情報を出力する変数)
( )内には情報を表示したい変数/配列/オブジェクトを入力します。
配列の場合・・・要素数と添え字
オブジェクトの場合・・・オブジェクト内部の変数の数やそれぞれの変数に関する情報
Eloquent ORM
さきほどはDBファサードで記述しましたが、Eloquentでも同じです。
$users = User::where('gender', '男性')->toSql(); var_dump($uses);
チュートリアル
前回のチュートリアルではJOIN句を使ってDBを結合しました。
今回はこのSQLの文を表示させてみます。
手順
1)コントローラの修正
2)ビューの修正
3)確認
1)コントローラの修正
1.->get() をコメントアウトをして ->toSql() を追加
2.ver_dumpで出力
class EmployeeController extends Controller { //一覧 public function select(){ $employees = DB::table('employees') ->join('depts','employees.dept_id','=','depts.dept_id') //->get(); ->toSql(); var_dump($employees); //出力 return view('employee.list')->with('employees',$employees); } }
2)ビューの修正
気になる方はforeach の箇所(SQLの出力部分)をコメントアウトします。
<h3>SQL確認</h3> <p style="color: tomato;">※クエリービルダーで作成したSQL文を表示</p> {{--@foreach($employees as $employee)--}} {{--{{$employee->dept_name." ".$employee->name}}<br>--}} {{--{{$employee->dept->dept_name." ".$employee->name}}<br>--}} {{--@endforeach--}}
3)確認
http://{ ホスト }/employee/list
LaravelによるSQLの確認は以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。