Laravel学習帳

Laravel5.2の学習帳です。開発環境はXAMPP for Windows 5.6.19 / 本番環境はさくらサーバー(スタンダード)

基礎知識

DBの操作について(JOIN句を使ってのテーブル結合)

前回Eloquentのリレーション(hasMany/belongTo)を使ってテーブルを結合しました。

DBの操作について(Eloquent)~リレーション~

今回はクエリービルダーのJOIN句を使って結合してみます。

 

クエリービルダー

テーブル間の結合を JOIN してデータを取得したい時は、クエリービルダーを使います。

例)部署(dept)と従業員テーブル(employees)の結合

 

Eloquent & クエリービルダー

$employees = App\Employee::select()
                     -> join('depts','depts.dept_id','=','employees.dept_id')
                     -> get();

 

DBファサード & クエリービルダー

$employees = \DB::table('employees')
                     ->join('depts','employees.dept_id','=','depts.dept_id')
                     ->get();
【 注意 】
join句を使って結合すると、テーブル間でカラムが被る場合があります。
この場合selectメソッドを使い、SQLのas句を使います。

例)部署テーブルの名前が「name」で従業員テーブルの「name」カラムと被ってしまった場合

$employees = \DB::table('employees')
                    ->select('name', 'depts.name as dept_name')
                    ->join('depts','employees.dept_id','=','depts.dept_id')
                    ->get();

 

チュートリアル

「部署」テーブルと「従業員」テーブルをJOIN句を使って結合します。

前回、作成したチュートリアルを編集します。

DBの操作について(Eloquent)~リレーション~

 

手順

1)コントローラの修正
2)ビューの修正
3)動作確認

 

1)コントローラの修正

:
use DB;
:
  //一覧
  public function select(){
  $employees = DB::table('employees')
   ->join('depts','employees.dept_id','=','depts.dept_id')
   ->get();
  return view('employee.list')->with('employees',$employees);
  }
:

 

2)ビューの修正

<h3>従業員リスト</h3>
<p style="color: tomato;">※クエリービルダーのJOIN句で表示</p>
@foreach($employees as $employee)
  {{$employee->dept_name." ".$employee->name}}<br>
@endforeach

 

【 注意 】
※リレーション先のカラムの表示の仕方は hasMany/belongTo のやり方と違います。

◆ hasMany/belongTo

$employee->dept->dept_name

◆ クエリービルダーJoin句

$employee->dept_name

でOKです。

 

3)動作確認

クエリービルダーによるJOIN句の結合については以上です。

 

-基礎知識