Laravel学習帳

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

基礎知識

DBの操作について(DBファサード&クエリービルダー)

LaravelでDBを操作するには二つやり方があります。

・DBファサード
・Eloquent(エロクアント)

前回は Eloquent について記事をエントリーしました。

DBの操作について(Eloquent)~基本~

今回はDBファサードでDBを操作してみます。

 

DBファサードについて

LaravelではDBファサードを使ってDBの操作ができます。

ファサードについてはコチラ

DBファサードを使った主な操作は以下になります。

 

SELECTクエリーを実行する

$results = DB::select('select * from employees where id = ?', [1]);

 

INSERT文を実行する

DB::insert('insert into employees (id, name) values (?, ?)', [1, '山田']);

 

UPDATE文を実行する

DB::update('update employees set gender = 'man' where name = ?', ['山田']);

 

DELETE文を実行する

DB::delete('delete from employees');

 

クエリービルダーについて

実際にDBファサードを使ってDBを操作する場合、クエリービルダーを併用します。

クエリービルダーとは「クエリーを組み立てるもの」です。

ここでいう "クエリー" とは SQLで使われる用語の「クエリー」です。

つまり PHP だけで SQL を発行できる仕組みです。

例えば以前に作成した「employees」テーブルをクエリービルダーを使って一覧表示させてみます。

例)「employees」テーブルを一覧表示させる

$employees = DB::table('employees')->get();
【 SQLで書くと 】

select * from employees;

table()でテーブル名を指定し、get()でselect文を実行します。

結果を $employees に代入。

この後の処理ですが、この変数を View に投げてループ処理をして表示させます。

foreach ($employees as $employee)
{
  var_dump($employee->name);
}

 

よく使うクエリービルダー

メソッド名 用法
where() ->where('gender', '=', 'man')
※->where(gender,'man')
orWhere() ->orWhere('id', '>', 100)
leftJoin()
DB::table('users')
->leftJoin('posts', 'users.id', '=', 'posts.user_id')
->get();
orderBy() ->orderBy('カラム', 'desc') ※昇順の場合
insert()
DB::table('users')
->insert(['email' => 'yamada@example.com', 'gender' => 'man']);
update()
DB::table('users')
->where('id', 1)
->update(['email' => 'yamamoto@example.com']);
delete()
DB::table('users')->where('id', 1)->delete();
get()
$users = DB::table('users')->get();

※一覧表示
first() 1行だけ取得
集計メソッド
(count、max、min、avg、sum)
$users = DB::table('users')->count();

クエリービルダーはチェーンメソッドで足していきます。

 

複雑な条件式

SQLの条件でも複雑なものもあります。

条件A and (条件B or 条件c) みたいな構文のケースです。

例えば

「京都在住」で「女性もしくはIDが100以上」

どのような記述になるか?

DB::table('employees')
  ->where('pref', '=', '京都')
  ->Where(function ($query) {
    $query->where('gender', ’女’)
          ->orWhere('id', '>', 100);
  })
  ->get();

ポイントは (条件B or 条件C) の箇所を無名関数(ディスクロージャー)で記述しているところです。

実践では動的に条件式に入れることが多いと思います。

条件にいれる値に変数を使うときは use を使います。

DB::table('employees')
  ->where('pref', '=', '京都')
  ->Where(function ($query)  use ($gender, $id){
    $query->where('gender', $gender)
          ->orWhere('id', '>', $id);
  })
  ->get();

検索ページを作るときによく使うテクニックです。

 

チュートリアル

前回、Eloquent で DB の一覧を表示させました。

DB の操作について(Eloquent)~基本~

今回はクエリービルダーで同じことをやってみます。

 

手順

1)コントローラの書き替え
2)動作確認

 

1)コントローラの書き替え

:
use DB;   #←解説①
:
  public function select(){
    //$employees = \App\Employee::all();            #←Eloquent
    $employees = DB::table(employees)->get();   #←DB Facade& Query Builder
    return view('employee.list')->with('employees',$employees);
  }
:
【 解説① 】
DBファサードを使うためにuseでインポートします。
なかったらエラーになります。
【 解説② 】
View の表示の仕方は Eloquent と同じです。
特に何も変更する箇所はありません。

 

2)動作確認

http://{ホスト}/employee/list

上記のように表示されればOKです。

 

-基礎知識