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
引用了myUser
模型的存储库。在这个存储库中,我有一个类似以下的函数:
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(…)
中,您可以将提取的值限制为仅可填充数组中的值。希望这意味着只有可填充的值才被视为查询的一部分
希望能有帮助