2016-10-22 97 views
2

我在这里做什么可能是愚蠢的,但我是新手laravel, 我正在应用搜索数据库使用查询过滤器。 正在使用javascript构建查询并将其传递给laravel函数。 例如Laravel作为字符串查询变量

window.open("/filterResults?types="+types); 
//types contains a string like "international#global#europe# etc 

现在控制器我得到这个字符串types和爆炸它做一个这样的查询

$tquery = "Where('type',".$typesArray[0].")"; 
    for($offset=1; $offset < count($typesArray); $offset++) { 
     $tquery .= "->orWhere('type', ".$typesArray[$offset].")"; 
    } 

和执行这样的查询

$firms = Firm::$tquery->get(); 

它给了我错误

Access to undeclared static property: App\Firm::$tquery 

我如何做我想做的事。

PS。类型是复选框,其中一些可以选中或全部选中。

回答

4

这是更好地使用whereIn()方法:

$firms = Firm::whereIn('type', $typesArray)->get(); 

但是,如果你需要用你的方式,你可以做这样的事情:

$firm = new App\Firm; 

foreach ($typesArray as $type) { 
    $firm = $firm->orWhere('type', $type); 
} 

$firms = $firm->get(); 
+1

真棒'whereIn'岩石,:)谢谢你。 –

1

您是否考虑过查询构建器?

$firmsQuery = (new Firm)->newQuery(); 

if($request->has('types')) { 
    $typesArray = $request->input('types'); 

    foreach ($typesArray as $type) { 
     $firmsQuery->where(function($query) use ($type) { 
      $query->orWhere('type', $type); 
     }); 
    } 

} 

$firms = $firmsQuery->get(); 
+0

非静态方法Illuminate \ Database \ Eloquent \ Mode l :: newQuery()不应该被静态调用,假设$ this来自不兼容的上下文 –

+1

哎呀!请检查更新的答案。有一个无意的错误。它应该是'$ firmQuery =(新公司) - > newQuery();' –

+0

Thankyou为您的关注和时间,但现在错误是'未定义的变量:类型' –