フロントエンドからフォーム配列を受け取ったとします:
$input = $request->input();
には、電子メール、名前、年齢、性別の 4 つの値が含まれています。ユーザーが電子メールと名前を入力した場合、データ テーブルは、ユーザーが入力した値に基づいてクエリされる必要があります。 、年齢と性別を入力すると、クエリがぼやけてしまいます。
しかし、ここで問題が発生します。ユーザーはこれら 4 つの入力のいずれかを入力する可能性があります。または、おそらく 4 です。その後、クエリ コンストラクターを使用すると、それぞれの値が存在するかどうかを判斷してからコンストラクターを記述することができなくなります。結(jié)局、ファジー クエリと正確なクエリの書き方が異なります。たとえば、今、フィールドが 2 つあるとします。 (メールアドレスと名前) にはファジークエリが必要です。Laravel のファジークエリのコンストラクターは次のように記述されます:
->where('email', 'LIKE', $input['email'])
次に、電子メールと名前がプログラム內(nèi)に存在するかどうかを判斷し、クエリ コンストラクターを結(jié)合する必要がありますか?
アイデアは次のとおりです。
ファジークエリのフィールドが 10 個(gè)もある場合、コードの量が多すぎてコンストラクターがまったく使用できません。
次のような別の方法があれば教えてください。
次に、
->where( 'LIKE', $where) を使用して、存在するかどうかのすべての狀況を 1 行に含めます。
インターネットでは、他の記述方法が推奨されています。
$where['email'] = ['like', $input['email']] ですが、laravel5.1 は使用できません。
複數(shù)條件のあいまいクエリと非あいまいクエリを解決する良い方法はありますか?
ringa_lee
Laravel は where に匿名関數(shù)を渡すことができます。
この匿名関數(shù)で判斷できます。
例えばこんな感じ
リーリーこうすることで、コンストラクターの構(gòu)造を壊さずに適切な判斷を行うことができます。
私は 5.1 を使用したことがありませんが、5.4 には when メソッドがあります。例:
リーリーこれは、$name
が空でない場合、次の関數(shù)
5.1にも同様の方法があるか確認(rèn)してください
クエリ ビルダーと言えばwhere()
方法是返回$this
-- つまり、クエリを連続して書くことができますが、連続して書かなければならないというわけではありません。
フィールドが多い場合、forループを書いても大丈夫ですか?:
リーリーあなたが判斷するのか、フレームワークが判斷するのか、あなたが判斷しなければなりません。ファジークエリのフィールドが 10 個(gè)ある場合、mysql は代わりに検索エンジンを使用して処理できますか?