LoginSignup
30
35

More than 3 years have passed since last update.

【laravel】データベースの操作:DBファサード編

Last updated at Posted at 2020-05-08

概要

laravelではデータベースを操作するにはいくつかの方法がります。

・DBクラスによる操作
・クエリビルダによる操作
・Modelクラス(Eloquent ORM)による操作

DBクラスもクエリビルダもIlluminate\Support\Facades\DBクラス(ファサード)による記述方法ですが、ModelクラスはIlluminate\Database\Eloquent\Modelクラスを継承するため仕組みが異なります。

そのため、DBクラスとModelクラスで投稿を分けて記述します。
【laravel】データベースの操作:Elequent編

余談ですがエディタでVSCodeを使用している場合は、拡張機能によりSQL文を大文字で記述することにより色が変わり見やすくなります。

DBクラス共通の記述

DBクラスでもクエリビルダでもDBファサードによる記述のためIlluminate\Support\Facades\DBをuseします。

use Illuminate\Support\Facades\DB;

DBクラスによる操作

DB::SQL値(SQL文、パラメータ配列)で記述する方法でデーターべースを操作します。
SQL文をそのまま使用するイメージで記述できるためわかりやすいですが他の記述方法よりSQL文を理解する必要があります。

例)usersテーブルのselectとupdateとdelete

全てをselect
public function select(Request $request) {
 $items = DB::select('SELECT * from users');
 return view('sample.index',['items' => $items]);
}

// 記述方法:DB::select('SELECT文')
特定のIDをselect
public function select(Request $request) {
 $items = DB::select('SELECT * from users where id =:id', ['id'=>$request->id]);
 return view('sample.index',['items' => $items[0]]);
}

// 記述方法:DB::select('SELECT文', 'パラメータ')
// returnする際は、配列の0番目であることを記述すること
特定IDのレコードをupdate
public function update(Request $request) {
 $param = [
  'id' => $request->id
  'name' => $request->name,
  'age' => $request->age,
 ];
 DB::update('UPDATE users set name=:name, email=:email where id=:id', $param);
}

// 記述方法:DB::update('UPDATE文', 'パラメータ')
特定IDのレコードをdelete
public function dalete(Request $request) {
  $param = ['id' => $request->id];
  DB::delete('DELETE from sample where id =:id', $param);
}

// 記述方法:DB::dalete('DELETE文', 'パラメータ')

クリエビルダによる操作

SQL文を生成するためのメソッドをメソッドチェーンで記述することによりデーターベースを操作します。
DB::table('テーブル名')->DBメソッドのように記述して操作します。
DBクラスのメソッドですが、ほぼSQL文と同じように記述できるためSQL文がある程度理解できていれば違和感なく使用できると思います。

例)usersテーブルのselectとupdateとdelete

全てをselect
public function select(Request $request) {
 $items = DB::table('users')->get();
 return view('hello.index',['items' => $items]);
}

// 記述方法: DB::table('テーブル名')->get(['フィールド名', )
// getメソッドの引数を指定しなければ全てのフィールドが取得される
特定のIDをselect
public function select(Request $request) {
 $items = DB::table('users')->where('id',$request->id)->first();
 return view('hello.index',['items' => $items]);
}

// 記述方法:DB::table('テーブル名')->where('フィールド名',パラメータ)->first();
特定IDのレコードをupdate
public function update(Request $request) {
 $param = [
  'id' => $request->id
  'name' => $request->name,
  'age' => $request->age,
 ];
 DB::table('users')->where('id',$request->id)->update($param);
}

// 記述方法:DB::table('テーブル名')->where('フィール名',パラメータ)->update(パラメータ);
特定IDのレコードをdelete
public function dalete(Request $request) {
  DB::table('samole')->where('id', $request->id)->delete();
}

// 記述方法:DB::table('テーブル名')->where('フィール名',パラメータ)->delete(パラメータ);

参考

データベース:利用開始
データベース:クリエビルダ

30
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
35