Unity(C#)初心者・入門者向けチュートリアル ひよこのたまご

AndroidやiOS向けアプリを簡単に作れるゲーム開発環境Unity(ユニティ)の使い方を、チュートリアル方式で一緒に学びましょう!

【Laravel】Eloquentのwhere検索機能 AND検索, OR検索, NOT検索, あいまい検索

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検索を行なっています。

f:id:hiyotama:20181114171802p:plain
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検索を行なっています。

f:id:hiyotama:20181114171832p:plain
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で受け取った引数
を指定します。

%を前後に付けることで
文中のどこかにあれば良いというあいまい検索となります。

ちなみにシングルクォーテーションで囲うと
引数が文字列として認識されてしまい機能しません。
ダブルクォーテーションで囲うことで引数として機能させられます。

f:id:hiyotama:20181114173545p:plain
http://localhost:8000/articles/search?body=GetComponent の結果


今回はここまでです、ありがとうございました〜!