クエリビルダとは?
SQL文にパラメータ配列の値を組み込んで文を生成するため、
正しくSQL文ができているかわかりにくい。
渡される値によっては、予想外のSQL文が実行される危険もあります。
そこで、用意されたのが、 「クエリビルダ」 です。
「クエリビルダ」 は、SQLのクエリ文を生成するために用意された一連のメソッドです。
DB::table
とget
早速クエリビルダを使ってみます。
public function index(Request $request) {
$items = DB::table('people')->get();
return view('hello.index',['items' => $items]);
}
$変数 = DB::table('**テーブル名**')->get();
指定したテーブルのビルダを取得します。
ビルダは「Illuminate\database\Query」名前空間にある Builderクラス で、
SQLクエリ文を生成するための機能を提供します。
ここではビルダの「get」メソッドを使っています。
これはそのテーブルにあるレコードを取得するもので、
SQLの select
文に相当するものと考えていいでしょう。
例えば、get(['id','name'])
とすれば、
idとnameのフィールドだけを取り出すことができます。
(省略すると全てのレコードの項目が取得できる。)
指定したIDのレコードを得る
参照用のテンプレートページを作成
@extends('layouts.helloapp')
@section('title','Show')
@section('menubar')
@parent
新規作成ページ
@endsection
@section('content')
<form action="/hello/show" method="post">
<table>
<tr><th>id: </th><td>{{$item->id}}</td></tr>
<tr><th>name: </th><td>{{$item->name}}</td></tr>
<tr><th>mail: </th><td>{{$item->mail}}</td></tr>
<tr><th>age: </th><td>{{$item->age}}</td></tr>
</table>
</form>
@endsection
@section('footer')
copyright 2020 tuyano.
@endsection
public function show(Request $request) {
$id = $request->id;
$item = DB::table('people')->where('id', $id)->first();
return view('hello.show', ['item' => $item]);
}
Route::get('hello/show','App\Http\Controllers\HelloController@show');
演算記号を指定した検索
where(**フィールド名**,**演算記号**,**値** )
@section('content')
@if($items != null)
@foreach($items as $item)
<table width="400px">
<tr>
<th width="50px">id: </th><td width="50px">{{$item->id}}</td>
<th width="50px">name: </th><td width="50px">{{$item->name}}</td>
</tr>
</table>
@endforeach
@endif
@endsection
public function show(Request $request) {
$id = $request->id;
$items = DB::table('people')->where('id', '<=', $id)->get();
return view('hello.show', ['items' => $items]);
}
whereとorWhere
全ての条件に合致するものだけ検索
where(**条件**)->where(**条件**)
条件に1つでも合致すれば全て検索
where(**条件**)->orWhere(**条件**)
nameとmailから検索する
public function show(Request $request) {
$name = $request->name;
$items = DB::table('people')
->where('name', 'like', '%' . $name . '%')
->orWhere('mail', 'like', '%' . $name . '%')
->get();
return view('hello.show', ['items' => $items]);
}
上記の記述より、
クエリ文字の名前が「名前とメールアドレス」の中に入っているレコードに対して
全て検索する。
whereRawによる条件検索
whereRaw(**条件式**,**パラメータ配列**)
並び順を指定する「orderBy」
orderBy(**フィールド名**,'ascまたはdesc')
public function index(Request $request) {
$items = DB::table('people')->orderBy('age','asc')->get();
return view('hello.index',['items' => $items]);
}
上記の記述をすることで、
indexページの並び順を年齢の昇順にする。
offset
とlimit
指定した位置からレコードを取得する
offset(**整数**)
指定した数だけレコードを取得する
limit(**整数**)
public function show(Request $request) {
$page = $request->page;
$items = DB::table('people')
->offset($page * 3)
->limit(3)
->get();
return view('hello.show', ['items' => $items]);
}
insert
によるレコード追加
DB::table( **テーブル名**)->insert(**データをまとめた配列**)
レコード追加処理を変更する
public function create(Request $request) {
$param = [
'name' => $request->name,
'mail' => $request->mail,
'age' => $request->age,
];
DB::table('people')->insert($param);
return redirect('/hello');
}
update
によるレコード更新
DB::table( **テーブル名**)->where(**更新対象の指定**)->update(**配列**)
public function edit(Request $request) {
$item = DB::table('people')
->where('id', $request->id)->first();
return view('hello.edit',['form' => $item]);
}
public function update(Request $request) {
$param = [
'name' => $request->name,
'mail' => $request->mail,
'age' => $request->age,
];
DB::table('people')
->where('id', $request->id)
->update($param);
return redirect('/hello');
}
delete
によるレコード削除
DB::table( **テーブル名**)->where(**更新対象の指定**)->delete()
public function del(Request $request) {
$item = DB::table('people')
->where('id', $request->id)->first();
return view('hello.del',['form' => $item]);
}
public function remove(Request $request) {
DB::table('people')
->where('id', $request->id)->delete();
return redirect('/hello');
}
これで、クエリビルダによるCRUDの基本が扱えるようになりました。