概要
laravelではデータベースを操作するにはいくつかの方法がります。
・DBクラスによる操作
・クエリビルダによる操作
・Modelクラス(Eloquent ORM)による操作
DBクラスもクエリビルダもIlluminate\Support\Facades\DB
クラス(ファサード)による記述方法ですが、ModelクラスはIlluminate\Database\Eloquent\Model
クラスを継承するため仕組みが異なります。
そのため、DBクラスとModelクラスで投稿を分けて記述します。
[【laravel】データベースの操作:Elequent編]
(https://qiita.com/gone0021/items/951cd63a7e591e18cd2a)
余談ですがエディタで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
public function select(Request $request) {
$items = DB::select('SELECT * from users');
return view('sample.index',['items' => $items]);
}
// 記述方法:DB::select('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番目であることを記述すること
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文', 'パラメータ')
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
public function select(Request $request) {
$items = DB::table('users')->get();
return view('hello.index',['items' => $items]);
}
// 記述方法: DB::table('テーブル名')->get(['フィールド名', )
// getメソッドの引数を指定しなければ全てのフィールドが取得される
public function select(Request $request) {
$items = DB::table('users')->where('id',$request->id)->first();
return view('hello.index',['items' => $items]);
}
// 記述方法:DB::table('テーブル名')->where('フィールド名',パラメータ)->first();
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(パラメータ);
public function dalete(Request $request) {
DB::table('samole')->where('id', $request->id)->delete();
}
// 記述方法:DB::table('テーブル名')->where('フィール名',パラメータ)->delete(パラメータ);
参考
[データベース:利用開始]
(https://readouble.com/laravel/6.x/ja/database.html)
[データベース:クリエビルダ]
(https://readouble.com/laravel/6.x/ja/queries.html)