php - 如果数据不为空,则使用 where 查询
问题描述
我有这个查询
$something = Something::where('height, '>=', $request->heightMin)
->where('height, '<=', $request->heightMax)
->get();
它有效,但如果我想使用现场年龄怎么办。这个文件不是必需的,所以我可能有值(int)或空值。所以如果我有值“null”,我希望这个字段被忽略。我怎样才能做到这一点?
解决方案
您可以使用when
仅在请求中存在值时应用查询。
从文档:
有时您可能希望仅在其他情况为真时才将子句应用于查询。
where
例如,如果传入请求中存在给定的输入值,您可能只想应用语句。您可以使用以下when
方法完成此操作:
$role = $request->input('role');
$users = DB::table('users')
->when($role, function ($query, $role) {
return $query->where('role_id', $role);
})
->get();
该
when
方法仅在第一个参数为真时执行给定的闭包。如果第一个参数是false
,则不会执行闭包。
像这样的东西:
$something = Something::where('height', '>=', $request->heightMin)
->where('height', '<=', $request->heightMax)
->when($request->age, function ($query, $age) {
// your query here
$query->where('age', $age);
})
->get();
推荐阅读
- c# - Blazor WebAssembly 应用程序 - 来自浏览器的 API 调用 - 抱歉,此地址没有任何内容
- c++ - 按钮和文本重叠
- c# - C# 中的远程桌面客户端访问图像数据
- java - 如何为 Map 类型的 RequestParam 指定默认值
? - c++ - msvc 等效于函数、参数和局部变量的 __attribute__((unused))
- rust - 使用 const 通过强制转换计算其他 const 表达式
- flutter - 使用循环跳过 StreamBuilder 中的列表项
- javascript - 使用 React-NextJS 模拟 Chrome 扩展的慢速网络连接
- csv - 我可以将 csv 从 url 链接到 google 电子表格吗?
- reactjs - 如何在 create-react-app 中的 web worker 中导入已安装的节点模块?