2016-11-19 45 views
0

我使用Laravel 5.3。Laravel使用Get params in Eloquent/DB

我有一个存储库,对于特定的查询,我想用$ _GET参数进行过滤。

有没有办法做到这一点,如:

protected function queryGetAds(Request $request) 
{ 
    return $this->model 
     ->select('*') 
     ->where('status', '=', 1) 
     ->where(function ($q) use ($request) { 
      if ($request->from) { 
       $q->where('ad_price', '>=', $request->from); 
      } 
     }) 
     ->with('user'); 
} 

从现在开始,我有一个错误:

Type error: Argument 1 passed to App\Repositories\AdRepository::queryGetAds() must be an instance of Illuminate\Http\Request, none given,

有没有办法做到这一点?也许更好的方法..?

我想在$ _GET中添加一个“从”或“到”参数的位置。

+0

这听起来像你已经导入(使用'使用')错误的类和laravel不认为它适合。 –

+0

我认为它与'$ request-> from'语法有关。你尝试过使用'$ request-> input('field_name')'语法吗? – Abrar

回答

0

,可以有以下方法:

protected function queryGetAds(Request $request) 
{ 
    // ... 
} 

好像是,你在呼唤自己这种方法,而不是传递所需的参数所以错误出现。您可以调用它时传递Illuminate\Http\Request对象作为该方法的参数或刚刚摆脱从你的方法该参数和使用方法中的request全局函数来获得请求的实例,例如:

protected function queryGetAds() 
{ 
    $request = request(); // or app('request') or other alternatives 
    // Rest of your code should work from here... 

    return $this->model ... // Rest of the code ... 
} 

另外,还可以通过所有的请求参数在你的方法,如:

protected function queryGetAds(Array $requestParams) 
{ 
    return $this->model 
    ->select('*') 
    ->where('status', '=', 1) 
    ->where(function ($q) use ($requestParams) { 
     if(isset($requestParams['from'])) { 
      $q->where('ad_price', '>=', $requestParams['from']); 
     } 
    }) 
    ->with('user'); 
} 

而且通过PARAMS调用方法时,例如:

$someObject->queryGetAds(request()->all());