Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
发布时间 - 2025-12-09 00:00:00 点击率:次Laravel通过->操作符和$casts实现JSON字段的便捷查询与更新,支持条件筛选、字段提取、嵌套查询及whereJsonContains等高级用法,结合访问器与修改器可安全处理结构化数据。
在Laravel中操作数据库的JSON字段变得越来越常见,尤其是在需要灵活存储结构化数据的场景下。MySQL 5.7+ 和 PostgreSQL 等主流数据库都支持原生JSON类型,Laravel通过Eloq
uent和查询构造器提供了便捷的方式来查询和更新这些字段。
如何查询JSON字段
Laravel允许你使用->操作符来访问JSON字段中的值,这在where、select、orderBy等语句中都非常实用。
基本语法:
`users` 表有一个 `profile` JSON字段,内容如:{"age": 25, "city": "Beijing"}- 查询 profile 中 age 等于 25 的用户:
User::where('profile->age', 25)->get(); - 模糊匹配 city 字段:
User::where('profile->city', 'like', '%jing%')->get(); - 嵌套JSON查询(如 profile 包含 {"address": {"district": "Haidian"}}):
User::where('profile->address->district', 'Haidian')->get();
你也可以在 select 中提取JSON字段:
User::select('id', 'profile->city as city')->get();
如何更新JSON字段
Laravel会自动识别模型中定义为数组的属性,并将其序列化为JSON写入数据库。你可以在模型中配合 $casts 来实现自动转换。
- 在模型中定义 cast:
protected $casts = [
'profile' => 'array'
]; - 更新整个JSON字段:
User::where('id', 1)->update(['profile' => ['age' => 30, 'city' => 'Shanghai']]); - 只更新JSON中的某个键(推荐方式):
User::where('id', 1)->update(['profile->age' => 30]); - 同时更新多个JSON子字段:
User::where('id', 1)->update([
'profile->age' => 30,
'profile->city' => 'Guangzhou'
]);
使用whereJsonContains进行复杂查询
当JSON字段是数组时,比如 tags: ["php", "laravel"],你可以使用 whereJsonContains 来判断是否包含某个值。
- 查询包含 "laravel" 标签的用户:
User::whereJsonContains('profile->tags', 'laravel')->get(); - PostgreSQL还支持多值包含,MySQL则有限制。
注意:在MySQL中,whereJsonContains 要求字段是有效的JSON数组,否则可能无法匹配。
在模型中安全操作JSON属性
结合 $casts 和访问器/修改器,可以更安全地处理JSON字段。
- 定义 accessors 获取格式化数据:
public function getCityAttribute()
{
return $this->profile['city'] ?? null;
} - 使用 mutators 设置值前处理:
public function setProfileAttribute($value)
{
$this->attributes['profile'] = json_encode(array_filter($value));
}
这样可以在保存前过滤空值或做数据清洗。
基本上就这些常用操作。Laravel对JSON字段的支持已经很成熟,合理使用能大幅提升开发效率,特别是在配置、用户偏好、动态表单等场景下非常实用。关键是记得设置$casts,并熟悉->语法和whereJsonContains等高级查询方法。
# mysql
# php
# laravel
# js
# json
# access
# ai
# 数据清洗
# json数组
# 修改器
# Array
# NULL
# select
# public
# protected
# Accessors
# 访问器
# function
# this
# postgresql
# 数据库
# 是在
# 你可以
# 结构化
# 多个
# 自动识别
# 这在
# 表单
# 来实现
# 中都
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在 Pandas 中基于一列条件计算另一列的分组均值
JavaScript Ajax实现异步通信
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
Laravel如何使用Collections进行数据处理?(实用方法示例)
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
iOS正则表达式验证手机号、邮箱、身份证号等
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
在线制作视频的网站有哪些,电脑如何制作视频短片?
如何在IIS服务器上快速部署高效网站?
JavaScript模板引擎Template.js使用详解
音乐网站服务器如何优化API响应速度?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
活动邀请函制作网站有哪些,活动邀请函文案?
利用vue写todolist单页应用
如何快速搭建二级域名独立网站?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
长沙做网站要多少钱,长沙国安网络怎么样?
Laravel怎么判断请求类型_Laravel Request isMethod用法
详解Android中Activity的四大启动模式实验简述
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
用yum安装MySQLdb模块的步骤方法
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
如何实现javascript表单验证_正则表达式有哪些实用技巧
如何在阿里云ECS服务器部署织梦CMS网站?
开心动漫网站制作软件下载,十分开心动画为何停播?
如何为不同团队 ID 动态生成多个非值班状态按钮
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
C++用Dijkstra(迪杰斯特拉)算法求最短路径
如何在万网利用已有域名快速建站?
如何用y主机助手快速搭建网站?
手机软键盘弹出时影响布局的解决方法
lovemo网页版地址 lovemo官网手机登录
如何在万网主机上快速搭建网站?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
如何在IIS中新建站点并配置端口与物理路径?
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
油猴 教程,油猴搜脚本为什么会网页无法显示?
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
网页设计与网站制作内容,怎样注册网站?
Laravel如何实现模型的全局作用域?(Global Scope示例)
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
Android使用GridView实现日历的简单功能
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能

