2017-09-17 12 views
0

パラメータがテーブルから動的に取得されるフィルタを持つ電子商取引アプリケーションです。複数の選択肢と複数パラメータのフィルタから複雑なクエリを生成する際の問題

"フィルタ"テーブルは次のようになります。

id |グループ|ラベル|値
---- + ---------- + ------------------- + ----------- -----

12 |締め切り| 1〜3日間| 1 AND 3
14 |予算|すべて| 0
15 |予算| 1000未満| 1,1000
16 |予算| 1000〜10000 | 1000,10000
22 |ロケーション|すべて| 0
23 |ロケーション|ニューヨーク| Newyork
24 |ロケーション|カリフォルニア州|カリフォルニア
25 |ロケーション|アラバマ州|アラバマ

多くの間でパラメータの1つは次のとおりです。 "予算" とチェックボックスのオプションは次のとおりです。

すべて

1000年99999

100000から9999

10000から999999

ユーザーはここで複数のオプションを確認できます。

私は、このフィルタから動的に検索クエリを構築しようとしている

:(ここhttps://m.dotdev.co/writing-advanced-eloquent-search-query-filters-de8b6c2598dbを参照してください)

フィルタ用のビューファイル:

@foreach ($groups as $group => $filters) 
       <div class="panel panel-default"> 
        <b>{{ $group }}</b> 
        @foreach($filters as $filter) 
         <div id="collapseOne1" class="panel-collapse collapse in"> 
          <div class="panel-body"> 
           <div class="checkbox"> 
            <label><input class=" 
            <?php if ($filter->value == '0') { ?> 
              {{ $filter->group }} 
            <?php } else { ?> 
               {{ $filter->group."Child" }} 
            <?php }?>" type="checkbox" name="{{ $filter->group }}" value="{{ $filter->value }}">{{ $filter->label }}</label> 
           </div> 
          </div> 
         </div> 
        @endforeach 
       </div> 
     @endforeach 

コントローラがあります。

$requests = $requests->newQuery(); 
if ($request->has('budget')) { 
     foreach (explode(',',$request->budget) as $budget) { 
      $min = 0; 
      $max = 1; 
      if($budget < $min){ 
       $min = $budget; 
      } 
      if($budget > $max){ 
       $max = $budget; 
      } 
     } 
      $requests->whereBetween('budget',[$min, $max]); 
     } 
$requests = $requests->paginate(5); 
... 

上記のコードは、常にmin = 0を設定するので動作していないようです。誰かが、動的に生成された複数選択フィルタララベルで?事前に

おかげで、

答えて

0

価格は何とか負でない限り、あなたの$ minは常に0になりますか...?私は問題が何であるか完全に理解していません。あなたは動的にクエリを連鎖させることができますが、これは論理的な問題であり、クエリビルダーの問題ではないでしょうか?コメントをもとに

編集:

問題は、あなたの$の予算は何とか負でない限り、trueを返すことがないという$の予算< $分です。 1000 < 0 =>はfalseを返すので、$ minを$ budgetに決して設定しません。だから、まともな$ min値を設定する必要があります。あなたがしたいことは:

$分= $ request-> input( 'budget'、0);

これはリクエストのbudgetパラメータに$ minを割り当てますが、そのパラメータが存在しない場合はデフォルトで0になります。

+0

問題は、ユーザーが複数のチェックボックスを同時に選択できることです。たとえば、私は1000から10000と10000から100000のような2つのオプションを選択することができます。ここでは、最小値は1000であり、最大値は100000です。しかし、クエリの問題は、選択します。はい、そうです、それはコーディングの問題です。私はララベルを初めて勉強しているので、私はそれを見つけるのが難しいので、ここでいくつかの助けを求めています。どのオンライン資料でも助けていただければ幸いです。再度、感謝します。 – chuck

関連する問題