如何在 Laravel Eloquent 中简洁查询多个枚举值?
发布时间 - 2026-01-03 00:00:00 点击率:次使用 `wherein()` 方法可替代冗长的链式 `orwhere()`,以一行代码高效查询字段值属于指定数组的多条记录,语义清晰、性能更优。
在 Laravel Eloquent 中,当需要查询某字段匹配多个离散值(如 category_type 等于 2、3 或 4)时,直接链式调用 orWhere() 不仅冗长,还容易因逻辑优先级引发意外结果——尤其在混用 where() 和 orWhere() 时,若未显式分组,SQL 的 AND/OR 优先级可能导致查询偏离预期。
你尝试的 $categories = Category::where('category_type',[2,3,4,5])->get() 实际执行的是等值匹配(即 WHERE category_type = [2,3,4,5]),而非“包含于数组”,因此数据库仅将整个数组视为单个标量值(部分驱动下可能隐式转为字符串或触发类型转换),最终只返回 category_type = 2 的记录——这是常见误区。
✅ 正确且最简方案是使用 whereIn():
$categories = Category::whereIn('category_type', [2, 3, 4])->get();该语句生成标准 SQL:
SELECT * FROM categories WHERE category_type IN (2, 3, 4),语义准确、性能高效,且天然支持空数组(返回空集合,无 SQL 错误)。
⚠️ 注意事项:
- whereIn() 要求第二个参数为索引数组或集合,不支持关联数组(键名会被忽略);
- 若需动态构建条件(如从请求参数获取类型
列表),建议先过滤非法值并确保数组非空,必要时配合 when() 避免空查询:$types = request('types', []); $categories = Category::when(!empty($types), function ($query) use ($types) { return $query->whereIn('category_type', $types); })->get(); - 如需排除某些值,对应方法为 whereNotIn();
- 对于超大数据集(如上万 ID),注意数据库对 IN 子句的长度限制,此时应考虑分批查询或改用 JOIN/临时表。
综上,whereIn() 是替代多个 orWhere() 的标准、安全、可读性极佳的解决方案,应作为多值匹配的首选。
# laravel
# go
# 大数据
# sql
# 关联数组
# select
# 字符串
# 类型转换
# 数据库
# 链式
# 多个
# 的是
# 这是
# 子句
# 第二个
# 不支持
# 而非
# 如需
# 极佳
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
如何生成腾讯云建站专用兑换码?
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
香港服务器租用每月最低只需15元?
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
网站制作大概多少钱一个,做一个平台网站大概多少钱?
详解MySQL数据库的安装与密码配置
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
新三国志曹操传主线渭水交兵攻略
Android滚轮选择时间控件使用详解
原生JS实现图片轮播切换效果
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
Java解压缩zip - 解压缩多个文件或文件夹实例
进行网站优化必须要坚持的四大原则
Laravel如何使用模型观察者?(Observer代码示例)
简单实现Android文件上传
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
奇安信“盘古石”团队突破 iOS 26.1 提权
HTML 中动态设置元素 name 属性的正确语法详解
Laravel如何自定义分页视图?(Pagination示例)
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
微信小程序 HTTPS报错整理常见问题及解决方案
JS碰撞运动实现方法详解
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
C语言设计一个闪闪的圣诞树
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
浅谈javascript alert和confirm的美化
C++时间戳转换成日期时间的步骤和示例代码
微信小程序 scroll-view组件实现列表页实例代码
Laravel怎么上传文件_Laravel图片上传及存储配置
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
千库网官网入口推荐 千库网设计创意平台入口
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
微信小程序 wx.uploadFile无法上传解决办法
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
javascript中闭包概念与用法深入理解
高防服务器如何保障网站安全无虞?
Laravel如何处理CORS跨域请求?(配置示例)
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像


列表),建议先过滤非法值并确保数组非空,必要时配合 when() 避免空查询: