Laravelのクリエビルダーメモ
クリエビルダーとは
SQLのクエリ文を生成するために用意された一連のメソッドのこと。
SQLのクリエ文を意識せずりようすることができます。
Builderクラス
以下でテーブルのBuilderクラスを取得することができます。
Builderクラスに用意されているメソッドを利用して、テーブルの操作を行います。
DB::tabel(テーブル名);
テーブルのレコードを取得
テーブルのレコードを取得するにはget
メソッドを利用します。
DB::tabel(テーブル名).get();
以下のテーブルがあるとします。
id | name | 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
複数の条件を指定した検索
複数条件を指定する場合はwhere
とorWhere
メソッドを複数指定します。
以下のテーブルがあるとします。
id | name | 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]); }
などなど。。。