PHPバージョン:7.1.14
Laravelバージョン:5.7.9
前回までで、Eloquentのwhereメソッドを使った
モデルの検索を実装しました!
(ベースにResourceControllerを使っています!)
今回はwhereメソッドの様々な検索方法を書いていきます!
AND検索
AND検索は、whereメソッドをチェーンしていくことで実現します。
public function search(Request $request) { $articles = Article::where('category', $request->category) ->where('good', '>' , $request->good)-> get(); return view('res.index', ['articles' => $articles]) ; }
whereを2つ繋げて、
「カテゴリー名が一致している」
AND
「いいね数が引数以上である」
というAND検索を行なっています。
http://localhost:8000/articles/search?category=日記&good=3 の結果
OR検索
OR検索ではorWhereメソッドを使います。
public function search(Request $request) { $articles = Article::where('category', $request->category) ->orWhere('good', '>' , $request->good)-> get(); return view('res.index', ['articles' => $articles]) ; }
「カテゴリー名が一致している」
OR
「いいね数が引数以上ある」
というOR検索を行なっています。
http://localhost:8000/articles/search?category=日記&good=10 の結果
NOT検索
NOT検索では、whereNotInメソッドを使用します。
public function search(Request $request) { $articles = Article::whereNotIn('category', [$request->category])-> get(); return view('res.index', ['articles' => $articles]) ; }
「カテゴリー名が一致している」モデルを「除く」
という処理を行います。
whereNotInの引数は、
例え引数が1つの場合でも配列の形で指定して下さい。
Invalid argument supplied for foreach() エラーが発生します。
あいまい検索
最後にあいまい検索です。
whereメソッドの中で、'like'句を使います
public function search(Request $request) { $articles = Article::where('body', 'like', "%{$request->body}%")-> get(); return view('res.index', ['articles' => $articles]) ; }
第1引数にカラム名、
第2引数に'like'句、
第3引数に$requestで受け取った引数
を指定します。
%を前後に付けることで
文中のどこかにあれば良いというあいまい検索となります。
ちなみにシングルクォーテーションで囲うと
引数が文字列として認識されてしまい機能しません。
ダブルクォーテーションで囲うことで引数として機能させられます。
http://localhost:8000/articles/search?body=GetComponent の結果
今回はここまでです、ありがとうございました〜!