php - laravelで複数のファジー条件付きクエリを結合するにはどうすればよいですか?
ringa_lee
ringa_lee 2017-05-16 12:02:58
0
5
1774

フロントエンドからフォーム配列を受け取ったとします:
$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 は使用できません。
複数条件のあいまいクエリと非あいまいクエリを解決する良い方法はありますか?

ringa_lee
ringa_lee

ringa_lee

全員に返信(5)
洪涛

Laravel は where に匿名関数を渡すことができます。

この匿名関数で判断できます。

例えばこんな感じ

リーリー

こうすることで、コンストラクターの構造を壊さずに適切な判断を行うことができます。

いいねを押す +0
某草草

私は 5.1 を使用したことがありませんが、5.4 には when メソッドがあります。例:

リーリー

これは、$nameが空でない場合、次の関数

が実行されることを意味します。

5.1にも同様の方法があるか確認してください

いいねを押す +0
滿天的星座

クエリ ビルダーと言えばwhere()方法是返回$this -- つまり、クエリを連続して書くことができますが、連続して書かなければならないというわけではありません。

フィールドが多い場合、forループを書いても大丈夫ですか?:

リーリー
いいねを押す +0
小葫芦

リーリー

いいねを押す +0
大家讲道理

あなたが判断するのか、フレームワークが判断するのか、あなたが判断しなければなりません。ファジークエリのフィールドが 10 個ある場合、mysql は代わりに検索エンジンを使用して処理できますか?

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート