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 を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。

