循环遍历数组以使用雄辩的内部雄辩查询获取数据

时间:2016-10-14 10:47:24

标签: php laravel eloquent laravel-5.1

我正在编写一个旅游机构网站。我在数据库中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); 

所以网址会是这样的:

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

hotels-search页面中,我阅读了$_GET,并展开了星号变量并对此查询进行了编码以获取数据:

$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星的酒店,我只会得到五星级酒店!

如果我搜索四星级和三星级酒店,我只能获得四星级酒店!其他时候我从数据库中得不到任何东西!!

如何进行查询,以便同时获得1星或3星或5星的酒店?!

2 个答案:

答案 0 :(得分:1)

为什么不使用此

<properties>
  <spark.version>1.6.2</spark.version>
  <kafka.version>0.8.2.1</kafka.version>
</properties>

<dependency>
  <groupId>org.apache.kafka</groupId>
  <artifactId>kafka_2.10</artifactId>
  <version>${kafka.version}</version>
</dependency>

<dependency>
  <groupId>org.apache.spark</groupId>
  <artifactId>spark-streaming_2.10</artifactId>
  <version>${spark.version}</version>
</dependency>

<dependency>
  <groupId>org.apache.spark</groupId>
  <artifactId>spark-core_2.10</artifactId>
  <version>${spark.version}</version>
</dependency>

<dependency>
  <groupId>org.apache.spark</groupId>
  <artifactId>spark-streaming-kafka_2.10</artifactId>
  <version>${spark.version}</version>
</dependency>

答案 1 :(得分:0)

获取变量由单个&分隔,而不是&&。每个名称值对都有以下形式: - name = value。

试试这个。

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

然后您的网址将是:

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

在酒店搜索页面

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

希望这会对你有帮助......