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


相关推荐: 教学论文网站制作软件有哪些,写论文用什么软件 ?  青岛网站建设如何选择本地服务器?  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  Linux系统命令中tree命令详解  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  利用python获取某年中每个月的第一天和最后一天  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  如何为不同团队 ID 动态生成多个独立按钮  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  非常酷的网站设计制作软件,酷培ai教育官方网站?  iOS验证手机号的正则表达式  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  Laravel怎么实现模型属性的自动加密  如何在云主机上快速搭建网站?  独立制作一个网站多少钱,建立网站需要花多少钱?  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  装修招标网站设计制作流程,装修招标流程?  ,在苏州找工作,上哪个网站比较好?  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  lovemo网页版地址 lovemo官网手机登录  利用JavaScript实现拖拽改变元素大小  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Android自定义listview布局实现上拉加载下拉刷新功能  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  Laravel如何发送系统通知?(Notification渠道示例)  如何在橙子建站上传落地页?操作指南详解  在线教育网站制作平台,山西立德教育官网?  如何在阿里云完成域名注册与建站?  高端建站如何打造兼具美学与转化的品牌官网?  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  Laravel怎么实现验证码(Captcha)功能  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  在线制作视频的网站有哪些,电脑如何制作视频短片?  Laravel怎么在Controller之外的地方验证数据  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  详解jQuery中基本的动画方法  Laravel如何实现用户注册和登录?(Auth脚手架指南)  Android利用动画实现背景逐渐变暗  高端云建站费用究竟需要多少预算?  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】