我使用的是Laravel 5.3。
我有一个Repository,对于一个特定的查询,我想使用$ _GET params进行过滤。
有没有办法做到这一点:
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');
}
从现在起,我有一个错误:
类型错误:参数1传递给 App \ Repositories \ AdRepository :: queryGetAds()必须是。的实例 照亮\ Http \请求,没有给出,
有办法做到这一点吗?也许更好的方式..?
当我得到一个"来自"我想添加一个地方或"到" $ _GET中的参数。
答案 0 :(得分: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');
}
调用方法时传递参数,例如:
$someObject->queryGetAds(request()->all());