この記事は以下の書籍を参考に執筆しました。
#クエリビルダ
これを使うとメソッドチェーンでDBアクセスができる
##クエリビルダとは
PHPで書いてるのにSQLクエリという別言語で書いていくのってなんか違くない?
ということで用意されたのがクエリビルダ
メソッドを呼び出していくだけでDBアクセスができる。
##DB::tableとget
テーブルの全レコードを取得
###DB::table
$変数=DB::table('テーブル名');
####get
取得するフィールドを特定する場合は引数を利用する
例えばget['id','name']
とすればidとnameフィールドだけを取り出せる。
省略すると全フィールドを取得
戻り値は各レコードの値をオブジェクトにまとめたものが保管される。
##特定レコードの取得
###showメソッド
$item=DB::table('people')->where('id', $id)->first();
####where
where('フィールド名', 値)
SQLのwhere フィールド名=値
のような感じ
####first
最初のレコードを返す
getはすべてだがfirstは最初のものだけ
1つしかレコードが無いとわかっているものはfirstを使う
##演算記号を指定した検索
whereに3つの引数をもたせるとより複雑な検索ができる。
where(フィールド名,演算記号, 値)
###例
where('id','>', 5)
とすれば
IDが5より大きいものを検索できる。
###whereとorWhere
####すべての条件に合致するものだけを検索
where(...)->where(...)
####条件に1つでも合致すればすべて検索
where(...)->orWhere(...)
##like検索
フィールド名 like '%テキスト%'
そこにどんな文字があってもOK検索
例えば%abc%ならabcの前後にどんなテキストがあってもOK
##whereRawによる条件検索
whereをいくつもつなぎ合わせるよりも条件を指定して検索できる
whereRaw(条件式,パラメータ配列)
public function show(Request $request)
{
$min=$request->min;
$max=$request->max;
$items=DB::table('people')->whereRaw('age >= ? and age <= ?', [$min,$max])->get();
return view('hello,show',['items'->$items]);
}
/show?min=20&max=50
とアクセスすればあげあ20以上50以下のものを検索する。
age >= ? and age <= ?
?
のところにパラメータ配列が入る。
whereRawのプレースホルダは?になる。:nameという形式ではない
##並び順を指定
orderBy(フィールド名,'ascまたはdesc')
名前 | 説明 |
---|---|
asc | 昇順(1234,abcd..あいうえお) |
desc | 降順(4321,dcba) |
getメソッドの前に書く |
###例
$items=DB::table('people')->oderBy('age','asc')->get();
##ofsetとlimit
大量のレコードが有る場合はそこから部分的に取り出して表示するほうが楽
###指定した位置からレコードを取得
ofset(整数)
例えばofset(10)なら最初から10個分だけ移動して11個めから取得する
###指定した数だけレコードを収録
limit(整数)
limit(10)なら10個だけ取得
##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(配列);
updateはinsertと同じ
ただしwhereでどのレコードを更新するのかを指定してあげないとすべてのレコードが更新されてしまう
#参考文献