LoginSignup
1
0

More than 3 years have passed since last update.

【Laravel】クエリビルダ

Last updated at Posted at 2020-07-22

この記事は以下の書籍を参考に執筆しました。

クエリビルダ

これを使うとメソッドチェーンでDBアクセスができる

クエリビルダとは

PHPで書いてるのにSQLクエリという別言語で書いていくのってなんか違くない?
ということで用意されたのがクエリビルダ

メソッドを呼び出していくだけでDBアクセスができる。

DB::tableとget

テーブルの全レコードを取得

DB::table

$変数=DB::table('テーブル名');

出典:PHPフレームワークLaravel入門 第2版

get

取得するフィールドを特定する場合は引数を利用する
例えばget['id','name']とすればidとnameフィールドだけを取り出せる。
省略すると全フィールドを取得

戻り値は各レコードの値をオブジェクトにまとめたものが保管される。

特定レコードの取得

showメソッド

$item=DB::table('people')->where('id', $id)->first();

出典:PHPフレームワークLaravel入門 第2版

where

where('フィールド名', )

出典:PHPフレームワークLaravel入門 第2版

SQLのwhere フィールド名=値のような感じ

first

最初のレコードを返す
getはすべてだがfirstは最初のものだけ

1つしかレコードが無いとわかっているものはfirstを使う

演算記号を指定した検索

whereに3つの引数をもたせるとより複雑な検索ができる。

where(フィールド名,演算記号, )

出典:PHPフレームワークLaravel入門 第2版

where('id','>', 5)とすれば
IDが5より大きいものを検索できる。

whereとorWhere

すべての条件に合致するものだけを検索

where(...)->where(...)

出典:PHPフレームワークLaravel入門 第2版

条件に1つでも合致すればすべて検索

where(...)->orWhere(...)

出典:PHPフレームワークLaravel入門 第2版

like検索

フィールド名 like '%テキスト%'

出典:PHPフレームワークLaravel入門 第2版

そこにどんな文字があってもOK検索
例えば%abc%ならabcの前後にどんなテキストがあってもOK

whereRawによる条件検索

whereをいくつもつなぎ合わせるよりも条件を指定して検索できる

whereRaw(条件式,パラメータ配列)

出典:PHPフレームワークLaravel入門 第2版

    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]);
    }

出典:PHPフレームワークLaravel入門 第2版

/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();

出典:PHPフレームワークLaravel入門 第2版

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');
    }

出典:PHPフレームワークLaravel入門 第2版

updateによるレコード更新

DB::table(...)->where(更新対象の指定)->update(配列);

出典:PHPフレームワークLaravel入門 第2版

updateはinsertと同じ
ただしwhereでどのレコードを更新するのかを指定してあげないとすべてのレコードが更新されてしまう

参考文献

1
0
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
1
0