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 】
相关推荐:
教学论文网站制作软件有哪些,写论文用什么软件
?
青岛网站建设如何选择本地服务器?
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路由绑定与控制器逻辑编写【指南】

