Laravel在Eloquent / DB中使用Get params

时间:2016-11-19 21:12:13

标签: php laravel

我使用的是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中的参数。

1 个答案:

答案 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());