のぐそんブログ

暗いおじさんがシコシコ書くブログです。

Laravelのクリエビルダーメモ

クリエビルダーとは

SQLのクエリ文を生成するために用意された一連のメソッドのこと。
SQLのクリエ文を意識せずりようすることができます。

Builderクラス

以下でテーブルのBuilderクラスを取得することができます。
Builderクラスに用意されているメソッドを利用して、テーブルの操作を行います。

DB::tabel(テーブル名);

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

テーブルのレコードを取得するにはgetメソッドを利用します。

DB::tabel(テーブル名).get();

以下のテーブルがあるとします。

id name mail age
2 kato kato@sample.com 35
7 sato sato@sample.com 40
8 suzuki suzuki@sample.com 25

コントローラーはこんな感じ。

class HelloController extends Controller
{
    public function index(Request $request)
    {
        $items = DB::table('users')->get();
        return view('hello.index', ['items' => $items]);
    }
}

viewはこんな感じ。

@endforeach
@foreach($items as $item)
    <p>{{$item->name}} / {{$item->mail}} / {{$item->age}}</p>
@endforeach

表示はこんな感じ。

kato / kato@sample.com / 35
sato / sato@sample.com / 40
suzuki / suzuki@sample.com / 25

特定のフィールドを取得する

getメソッドに引数を設定することで、特定のフィールドの値だけを取得する事ができます。

コントローラーはこんな感じ。

class HelloController extends Controller
{
    public function index(Request $request)
    {
        $items = DB::table('users')->get(['name','age']);
        return view('hello.index', ['items' => $items]);
    }
}

viewはこんな感じ。

@endforeach
@foreach($items as $item)
    <p>{{$item->name}} / {{$item->age}}</p>
@endforeach

表示はこんな感じ。

kato / 35
sato / 40
suzuki / 25

IDを指定してレコードを取得する

idをクエリパラメーターとして連携して、DBの値を取得します。

idを検索するにはwhereを利用します。

where(フィールド名, 値)

コントローラーはこんな感じ。

firstメソッドは取得した値のはじめの1つを取得します。
データは配列ではなくオブジェクトになるので注意。

    public function index(Request $request)
    {
        $id = $request->id;
        $item = DB::table('users')->where('id',$id)->first();
        return view('hello.index', ['item' => $item]);
    }

viewはこんな感じ。

<p>{{$item->name}} / {{$item->mail}} / {{$item->age}}</p>

表示はこんな感じ。

kato / kato@sample.com / 35

演算子を利用した検索

少し複雑な検索をする場合は以下のwhereメソッドに以下のように条件を指定します。

where(フィールド名,演算子,値)

コントローラーはこんな感じ。

firstメソッドは取得した値のはじめの1つを取得します。
データは配列ではなくオブジェクトになるので注意。

    public function index(Request $request)
    {
        $items = DB::table('users')->where('age','>',30)->get();
        return view('hello.index', ['items' => $items]);
    }

viewはこんな感じ。

@foreach($items as $item)
    <p>{{$item->name}} / {{$item->mail}} / {{$item->age}}</p>
@endforeach

表示はこんな感じ。

kato / kato@sample.com / 35
sato / sato@sample.com / 40

複数の条件を指定した検索

複数条件を指定する場合はwhereorWhereメソッドを複数指定します。

以下のテーブルがあるとします。

id name mail age
2 kato kato@sample.com 35
7 sato sato@sample.com 40
8 suzuki suzuki@sample.com 25
9 kato kato2@sample.com 15

以下の場合は指定した条件全てに合致したものが取得できます。

where(条件)->where(条件)

コントローラーはこんな感じで複数の条件を指定。

    public function index(Request $request)
    {
        $items = DB::table('users')->where('age','>',30)->where('name','=','kato')->get();
        return view('hello.index', ['items' => $items]);
    }

表示はこんな感じ。

kato / kato@sample.com / 35

以下の場合は1つでも条件にあって入れてば値を取得できます。

where(条件)->orWhere(条件)
    public function index(Request $request)
    {
        $items = DB::table('users')->where('age','>',30)->orWhere('name','=','kato')->get();
        return view('hello.index', ['items' => $items]);
    }

表示はこんな感じ。

kato / kato@sample.com / 35
sato / sato@sample.com / 40
kato / kato2@sample.com / 15

検索条件を文字列で指定する

whereRawを利用すると、検索条件を文字列で指定することができます。

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

コントローラーはこんな感じ。

    public function index(Request $request)
    {
        $min = $request->age;
        $items = DB::table('users')->whereRaw('age > 20 and name = "kato"')->get();
        return view('hello.index', ['items' => $items]);
    }

表示はこんな感じ。

kato / kato@sample.com / 35

クエリパラメーターを連携する場合はこんな感じ。

?の記号の箇所にパラメーターが埋め込まれます。

    public function index(Request $request)
    {
        $min = $request->age;
        $items = DB::table('users')->whereRaw('age > ? and name = "kato"',[$min])->get();
        return view('hello.index', ['items' => $items]);
    }

その他検索

あいまいな検索

likeはテキスト検索で利用する演算子
%はそこになんの値が入っててもOK。

where(フィールド名,'like','%値%')

コントローラーはこんな感じ。 mailフィールドにsample.comを取得します。

    public function index(Request $request)
    {
        $items = DB::table('users')->where('mail','like','%sample.com%')->get();
        return view('hello.index', ['items' => $items]);
    }

パラメーターを利用する場合は、%{$param}%のように利用します。

    public function index(Request $request)
    {
        $param = 'sample.com'
        $items = DB::table('users')->where('mail','like','%{$param}%')->get();
        return view('hello.index', ['items' => $items]);
    }

否定条件

「~ではない。」などで利用します。

whereNotIn(フィールド名,除く値の配列)
    public function index(Request $request)
    {
        $min = $request->age;
        $items = DB::table('users')->whereNotIn('id',[2,5])->get();
        return view('hello.index', ['items' => $items]);
    }

などなど。。。