
本文详细介绍了如何在Lar*el中查询包含数组的JSONB列,以实现类似`whereIn`的多值匹配逻辑。针对`JSON_CONTAINS`在查询数组时默认要求所有元素都匹配的问题,文章提出了使用`whereJsonContains`和`orWhereJsonContains`方法组合的解决方案,并通过具体代码示例展示了如何灵活地匹配JSON数组中的任意一个或多个值,提升查询的精确性和效率。
在现代Web应用开发中,将复杂数据结构存储为JSON或JSONB类型列已成为常见实践。例如,一个support_tags列可能存储一个简单的字符串数组,如["caring", "budgets", "careers_employment", "addictions"]。当需要查询这些列时,一个常见的需求是找到那些support_tags中包含给定列表中任意一个标签的服务,而不是要求包含所有标签。
直接使用数据库原生的JSON_CONTAINS函数(或Lar*el通过whereRaw调用的方式)配合一个完整的JSON数组进行查询时,往往会遇到不符合预期的结果。例如:
$categories = ["caring", "smoking"];
$services = \App\Models\Service::where("status", "accepted")
->whereRaw("JSON_CONTAINS(support_tags, '" . json_encode($categories) . "')")
->get();这段代码的意图是查找support_tags中包含"caring"或"smoking"的服务。然而,JSON_CONTAINS函数在第二个参数是一个JSON数组时,默认行为是检查第一个参数(support_tags)是否完整包含第二个参数(["caring", "smoking"])作为其子集。这意味着,只有当support_tags同时包含"caring"和"smoking"这两个元素时,记录才会被匹配。这与我们期望的“只要包含其中任意一个就匹配”的whereIn行为大相径庭。
Lar*el Eloquent 提供了专门用于查询JSON列的便捷方法,其中whereJsonContains()和orWhereJsonContains()是解决此类问题的关键。这些方法允许我们以更优雅、更安全的方式查询JSON列中的单个值,并结合Eloquent的查询构建器,实现复杂的逻辑。
whereJsonContains('column', 'value')方法用于检查指定JSON列中是否包含某个特定的值。例如,要查找support_tags中包含"caring"的服务:
$services = \App\Models\Service::whereJsonContains('support_tags', 'caring')->get();为了实现类似whereIn的“任意匹配”逻辑,我们需要组合多个whereJsonContains条件,并使用逻辑OR操作符。在Eloquent中,这通常通过在闭包函数中构建查询来实现,以确保OR条件被正确地分组。
假设我们要查找support_tags中包含"smoking"或"caring"的服务,并且这些服务状态为"accepted",可以这样构建查询:
标贝悦读AI配音
在线文字转语音软件-专业的配音网站
66
查看详情
$services = \App\Models\Service::where("status", "accepted")
->where(function($query) {
$query->whereJsonContains('support_tags', 'smoking')
->orWhereJsonContains('support_tags', 'caring');
})
->get();代码解析:
最终,这个查询会返回所有状态为"accepted",并且其support_tags列中包含"smoking"或"caring"(或两者都包含)的服务。
如果我们的匹配列表$categories是动态的,我们可以通过循环来构建这些orWhereJsonContains条件:
$categories = ["caring", "smoking", "budgets"]; // 假设这是一个动态的分类列表
$services = \App\Models\Service::where("status", "accepted")
->where(function($query) use ($categories) {
foreach ($categories as $category) {
$query->orWhereJsonContains('support_tags', $category);
}
})
->get();说明:
CREATE INDEX support_tags_gin_idx ON services USING GIN (support_tags);
在MySQL中,可以通过创建虚拟列并为其添加索引来优化。
Lar*el的whereJsonContains和orWhereJsonContains方法为查询JSON数组列提供了强大而灵活的工具。通过将这些方法与Eloquent的闭包查询功能结合,我们可以轻松实现类似whereIn的多值匹配逻辑,即在JSON数组中查找包含给定列表中任意一个值的记录。这种方法不仅提高了代码的可读性和维护性,还通过Eloquent的抽象层确保了查询的安全性,是处理JSONB数组列查询的推荐实践。
以上就是Lar*el中查询JSON数组列:实现whereIn式多条件匹配的详细内容,更多请关注其它相关文章!
# 第二个
# 西宁网站建设详细流程
# 黄骅工业网站建设
# 上海旅游推广网站大全
# 淘宝营销推广教程
# 北辰区电商网站推广分类
# 湖北seo软件排名前十
# 网站推广工作描述
# 音频网站推广
# 网站优化如何被百度收录
# 郑磊简历网络SEO
# 这是一个
# 我们可以
# 多个
# 第一个
# 是一个
# mysql
# 多条
# 已有
# 管理系统
# 数据结构
# 字符串数组
# 防止sql注入
# 应用开发
# sql注入
# ai
# 工具
# app
# go
# json
# js
# laravel
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
steam缓存文件在哪儿_steam缓存文件的路径查找方法与结构说明
J*aScript:从子元素中批量移除特定CSS类
C#中的Record类型有什么优势?C# 9新特性Record与Class的用法区别
PointNet++语义分割模型中类别变更引发的断言错误及标签处理策略
163邮箱登录入口官网 163.com邮箱登录入口
WooCommerce 购物车:始终显示所有交叉销售商品
search中maxlength属性用法解析
汽水音乐官网网页版入口 汽水音乐官网网页版在线入口
《海底捞》点外卖方法
优化 React onClick 事件处理:函数引用与箭头函数的对比
天堂漫画网页版在线阅读 天堂漫画手机版入口
美发店速赢秘籍
Sublime Text怎么关闭自动完成_Sublime禁用Auto Complete设置
动漫之家观看全集库 动漫之家免费资源网地址
iPhone 13 Pro Max如何设置桌面小组件_iPhone 13 Pro Max小组件添加指南
苹果电脑如何快速截图并编辑 苹果电脑截屏标注快捷操作
《雷电模拟器》自动点击设置方法
如何在mysql中设计餐饮点餐系统_mysql点餐系统项目实战
创建快捷方式启动系统保护
126邮箱申请入口官网_126邮箱注册免费登录2025
菜鸟裹裹怎样获得取件码_菜鸟裹裹获得取件码步骤
C++ virtual析构函数作用_C++基类虚析构函数防止内存泄漏
yy漫画官方网站登录入口_yy漫画在线阅读页面地址
sublime如何处理超大文件不卡顿 _sublime打开大日志文件技巧
智学网成绩单查询系统网_智学网学生平台登录
b站网页版入口 哔哩哔哩官方网站直接进入
从HTML表单获取逗号分隔值并转换为NumPy数组进行预测
Cassandra中复合主键、二级索引与ORDER BY排序的限制与解决方案
优化Asyncio嵌套函数调度:使用生产者-消费者模式实现并发流处理
优化2xN网格最大路径和的动态规划算法实践
CSS如何使用outline-offset与颜色组合突出元素边框
Lar*el Dusk 测试中管理浏览器权限:以剪贴板访问为例
sublime如何自定义文件类型图标_AFileIcon插件的主题切换与个性化配置
悟空浏览器网页版在线工具 悟空浏览器网页版在线平台入口
苹果手机如何清理系统缓存数据 iPhone非越狱清理垃圾文件的技巧【系统优化】
C++ bind函数使用教程_C++参数绑定与函数适配器的应用
快手极速版在线体验区 快手极速版网页体验入口
byrutor直接访问入口 byrutor官方游戏库
火狐浏览器无法自动更新怎么办 手动更新火狐浏览器到最新版本【解决】
Git命令与VS Code UI操作的对应关系解析
J*a实现任务清单管理_集合框架综合入门练手
使用Python和NLTK从文本中高效提取名词的实用教程
Go Template中优雅处理循环最后一项:自定义函数实践
德邦快递收费标准详解
Python类装饰器动态修改方法时的类型提示:Mypy插件实现精确静态分析
蛙漫2(台版)正版官网 2025免费网页版分享
Python中深度嵌套字典与列表的数据提取与条件过滤指南
PPT智能排版生成入口 免费PPT内容自动生成平台
服装短视频如何起号推广?服装短视频起号推广有什么要求?
钉钉任务无法提醒如何处理 钉钉任务提醒优化方法
2025-11-13
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。