2016-10-14 14 views
0

私は観光機関のウェブサイトをプログラミングしています。私はhotelsをデータベースに持っていて、starsという列は1から5までの整数です。雄弁な質問の中で雄弁を使ってデータを得るために配列をループする

私はユーザーがstarsに基づいてホテルを検索できる形式を持っています。フィールドはcheckboxなので、five starsfour starsのホテルを一緒に検索することができます。

私はstars arrayを読んで、このコードを使用して、検索ページへの訪問者をリダイレクト:

$stars_param = ""; 
    $i = 1; 
    foreach($stars as $star){ 
     if($i == 1){ 
      $stars_param .= $star; 
     }else{ 
      $stars_param .= "&".$star; 
     } 
     $i++; 
    } 
    $parameters = "filter=true&&stars=".$stars_param."&&price=".$price."&&area=".$area; 
    return \Redirect::to('/hotels-search/?'.$parameters); 

ので、URLは次のようになります:

hotels-search?filter=true&&stars=5&1&&price=300&&area=taksim 

そして私が読んhotels-searchページに$_GETを開き、stars変数を展開し、このクエリをコード化してデータをフェッチします。

$stars = $_GET['stars']; 
$stars_array = explode('&', $stars); 
$price = $_GET['price']; 
$area = $_GET['area']; 
$this['hotels'] = \Lilessam\Hotels\Models\Hotel::orderBy('id', 'desc')->where(function($query) use($stars_array){ 
       $i = 1; 
       foreach($stars_array as $star){ 
        if($i == 1){ 
         $query->where('stars', $star); 
        }else{ 
         $query->orWhere('stars', $star); 
        } 
        $i++; 
       } 

       })->where('price', '<=', $price)->whereHas('area', function($query) use($area){ 
           $query->where('name', 'LIKE', $area); 
           })->paginate(5); 

しかし、これで私が5つ星と1つのホテルを検索すると、私は5つ星ホテルしか得られません!

ホテルを4,3星で検索すると、4つ星ホテルのみが手に入ります!私はデータベースから何も得られません!

1つまたは3つ星または5つ星のホテルを同時に取得できるようにするにはどうすればよいですか?

答えて

1

なぜドン」あなたはこれを使用

$this['hotels'] = \Lilessam\Hotels\Models\Hotel::orderBy('id', 'desc') 
        ->whereIn('start',$stars_array) 
        ->where('price', '<=', $price) 
        ->whereHas('area', function($query) use($area){ 
          $query->where('name', 'LIKE', $area); 
          })->paginate(5); 
+0

感謝の男。それは完璧に働いた! –

0

は、変数は、単一の&、ない&&で分離され得ます。すべての名前の値のペアは、 - name = valueの形式をとります。

これを試してください。

$stars_param = implode(",",$stars); 
$parameters = "filter=true&stars=".$stars_param."&price=".$price."&area=".$area; 
    return \Redirect::to('/hotels-search/?'.$parameters); 

次に、あなたのURLは次のようになります。

hotels-search?filter=true&stars=5,1&price=300&area=taksim 

やホテルの検索ページ

$stars = $_GET['stars']; 
$stars_array = explode(',', $stars); 
$price = $_GET['price']; 
$area = $_GET['area']; 

これはあなたを助けるホープの

...

+0

実際に私はそれらを1つだけで区切りました。 '&' 'whereIn'を使用したときに解決されました。 –