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