Laravel 5-使用Get的请求对象数据时限制雄辩的Where参数

Laravel 5-使用Get的请求对象数据时限制雄辩的Where参数,laravel,laravel-5,eloquent,laravel-5.2,Laravel,Laravel 5,Eloquent,Laravel 5.2,我的控制器功能如下所示: public function get(Request $request){ return json_encode($this->users->get($request->all)); } 其中,$this->users引用了myUser模型的存储库。在这个存储库中,我有一个类似以下的函数: public function get($request){ return User::where($request)->get()

我的控制器功能如下所示:

public function get(Request $request){

    return json_encode($this->users->get($request->all));

}
其中,
$this->users
引用了my
User
模型的存储库。在这个存储库中,我有一个类似以下的函数:

public function get($request){

    return User::where($request)->get()->toArray();

}
GET /user?name=mike&description=skinny&age=45
我可以使用上面的代码动态地通过HTTP请求传入任意数量的参数进行搜索,而不必显式地声明列名

只要通过请求传入的所有参数都是有效的列名,这种方法就可以正常工作。如果传入的参数不是有效的表列,则会出错

我在与我的存储库对应的每个模型中定义了
受保护的$filleble
数组

是否有任何方法可以强制执行可以传递到上面的
where()
方法中的内容,以便只传递模型中
$filleble
数组中定义的有效列

例如,假设我有一个带有列的
users
表(
id
name
description
)。我传入的GET URL如下所示:

public function get($request){

    return User::where($request)->get()->toArray();

}
GET /user?name=mike&description=skinny&age=45
上面的URL中有三个参数,但其中只有两个是有效的列名。我希望自动取出
age
参数。在我当前的代码中,上面的URL将返回错误响应,因为
age
列不存在。

您可以使用帮助程序:

它将过滤
$request
,并仅保留
$filleble
数组中的键/值对


如果此代码不在模型中,请将
$this->filleble
更改为适当的变量或方法调用。

我编写了一个包,用于对模型进行此类筛选。它将允许您根据
User::filter($request->all())->get()进行筛选where()
约束时,执行代码>


尝试这样做:

public function get(Request $request)
{
    $user = new User();

    return User::where(
        $request->only($user->getFillable())
    )->get()->toArray();
}
通过创建
User
的实例,然后可以使用
getFillable()
访问它的
fillable
属性。通过将此列表传递到
$request->only(…)
中,您可以将提取的值限制为仅可填充数组中的值。希望这意味着只有可填充的值才被视为查询的一部分

希望能有帮助