データベースとの連携(2) クエリビルダの基本
クエリビルダとは、メソッドチェーンを用いてSQL文を簡単に組み立てる仕組みです。メソッドチェーンを用いることでコードを書く感覚でSQL文を作成することができます。
クエリビルダで生成されるクエリは、SQLが表面に現れることがなくSQLのことを意識しなくてもクエリを作成・実行が行えます。
プリペアドステートメントやパラメータ処理も限定的になります。
データの準備
データベースやテーブルは前項の「(1)DBクラス」で使用したものを使います。ここから始めた場合は以下を作成しましょう。
テーブル名:members
フィールド:id(連番)、name(氏名)、age(年齢)mail(メールアドレス)
テーブルを作成
1 2 3 4 5 6 7 |
CREATE TABLE members( id integer auto_increment, name varchar(16) not null, age tinyint not null, email varchar(256) not null, primary key (id) ); |
ダミーデータの準備
1 2 3 4 5 6 7 |
insert into members(name,age,email) values ( 'yamada' , 31 , 'yamada@cyber-genjin.net' ), ( 'tanaka' , 21 , 'tanaka@cyber-genjin.net' ), ( 'sato' , 36 , 'sato@cyber-genjin.net' ), ( 'harada' , 47 , 'harada@cyber-genjin.net' ), ( 'saito' , 33 , 'saito@cyber-genjin.net' ), ( 'ikeda' , 50 , 'ikeda@cyber-genjin.net' ); |
ルーティングの準備
1 2 3 4 5 |
Route::get('/select', [App\Http\Controllers\MemberController::class, 'select']); Route::get('/select2', [App\Http\Controllers\MemberController::class, 'select2']); Route::get('/insert', [App\Http\Controllers\MemberController::class, 'insert']); Route::get('/update', [App\Http\Controllers\MemberController::class, 'update']); Route::get('/delete', [App\Http\Controllers\MemberController::class, 'delete']); |
コントローラにuse文でDBファサードを追加する
1 |
use Illuminate\Support\Facades\DB; |
テーブルデータの取得
クエリの書式は、テーブルを指定して最後にgetメソッドを使います。
1 |
DB::table(テーブル名)->get(); |
実際のクエリは、以下となります。
1 |
$rows = DB::table('members')->get(); |
SQLのselect文に相当します。
1 |
select * from members; |
// MemberController
1 2 3 4 5 |
public function select() { $rows = DB::table('members')->get(); return view('index' , compact('rows')); } |
/resorces/views/index.blade.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>クエリビルダでレコード出力</title> </head> <body> <h4>DBクラスのレコード出力</h4> <table> <tr> <th>登録番号</th> <th>氏名</th> <th>年齢</th> <th>メール</th> </tr> @foreach( $rows as $row ) <tr> <td>{{ $row->id }}</td> <td>{{ $row->name }}</td> <td>{{ $row->age }}</td> <td>{{ $row->email }}</td> </tr> @endforeach </table> </body> </html> |
並び順を指定する場合は、「orderBy」メソッドを使います。書式は、
1 |
orderBy( テーブルの項目名 , 'desc') |
1 |
DB::table('members')->orderBy( age , 'desc')->get(); |
条件付きのデータの抽出 SELECT
21歳のレコードを抽出してみましょう。
1 2 3 4 5 6 |
public function select2() { $age = 21; $row = DB::('members')->where(age,$age)->first(); return view('index' , compact('row')); } |
抽出条件は、whereの部分です書式は、
1 |
where( データベースの項目名 , 値 ) |
複数条件がある場合は、whereでつなぎます。
1 |
where( テーブルの項目名 , 値 )->where( データベースの項目名 , 値 ) |
複数のwhere条件は、SQLの「and」になります。
SQLの「or」が使いたい場合の書式は「orWhere」を使います。、
1 |
where( データベースの項目名 , 値 )->orWhere( データベースの項目名 , 値 ) |
抽出条件に演算子を使う場合の書式は、
1 |
where( テーブルの項目名 , 演算記号 , 値 ) |
first()メソッドは最初のレコード1件のみ抽出します。
データの挿入 INSERT
1 |
DB::table('members')->insert( 配列 ); |
1 2 3 4 5 6 7 |
$data = [ 'name' => '池田', 'age' => '56', 'email' => 'ikeda@cyber-genjin.net', ]; DB::table('members')->insert( $data ); |
データの更新 UPDATE
1 |
DB::table('members')->where( 更新対象の条件 )->update( 配列 ); |
1 2 3 4 5 6 7 |
$data = [ 'name' => '永田', 'age' => '50', 'email' => 'nagata@cyber-genjin.net', ]; DB::table('members')->where( 'id' , 1 )->update( $data ); |
データの削除 DELETE
1 |
DB::table('members')->where( 更新対象の条件 )->delete(); |
1 |
DB::table('members')->where( 'id' , 1 )->delete(); |