Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧

发布时间 - 2025-12-09 00:00:00    点击率:
Laravel通过->操作符和$casts实现JSON字段的便捷查询与更新,支持条件筛选、字段提取、嵌套查询及whereJsonContains等高级用法,结合访问器与修改器可安全处理结构化数据。

在Laravel中操作数据库的JSON字段变得越来越常见,尤其是在需要灵活存储结构化数据的场景下。MySQL 5.7+ 和 PostgreSQL 等主流数据库都支持原生JSON类型,Laravel通过Eloquent和查询构造器提供了便捷的方式来查询和更新这些字段。

如何查询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异步处理任务提升应用性能