首页 > php框架 > Laravel > 正文

laravel怎么实现JSON字段的查询和更新_laravel JSON字段查询与更新方法

冰火之心
发布: 2025-10-16 12:44:01
原创
188人浏览过
Laravel支持通过Eloquent和查询构造器操作JSON字段,可查询、更新、插入JSON数据并使用MySQL函数进行高级检索。

laravel怎么实现json字段的查询和更新_laravel json字段查询与更新方法

如果您需要在 Laravel 中对数据库中的 JSON 字段进行查询或更新操作,可以通过 Eloquent ORM 或查询构造器直接访问和修改 JSON 数据。这种操作在处理配置信息、用户偏好设置等非结构化数据时非常常见。

本文运行环境:MacBook Pro,macOS Sonoma

一、使用 Eloquent 查询 JSON 字段

在 Laravel 中,可以利用 MySQL 的 JSON 路径语法来查询 JSON 类型字段中的特定键值。这种方法适用于 WHERE 条件中精确匹配某个 JSON 内部值的情况。

1、假设您的 users 表中有一个 profile JSON 字段,包含用户的年龄信息,您可以使用如下代码查询年龄为 25 的用户:
User::where('profile->age', 25)->get();

2、若要查询嵌套层级更深的数据,例如 profile->address->city,则写法如下:
User::where('profile->address->city', 'Beijing')->get();

3、支持使用操作符进行比较查询,如大于、小于:
User::where('profile->age', '>', 18)->get();

二、使用查询构造器执行 JSON 查询

当需要更灵活地构建查询语句时,可使用 DB facade 提供的查询构造器功能,它同样支持 JSON 字段的路径访问。

1、导入 DB Facade(如果尚未自动加载):
use Illuminate\Support\Facades\DB;

2、执行基础 JSON 查询:
DB::table('users')->where('profile->email', 'test@example.com')->get();

3、结合其他条件进行复合查询:
DB::table('users')->where('status', 1)->where('profile->age', '>=', 20)->get();

三、更新 JSON 字段中的特定键

Laravel 允许通过模型或查询构造器直接更新 JSON 字段内的某个子键,而无需替换整个 JSON 对象。

Find JSON Path Online
Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online30
查看详情 Find JSON Path Online

1、使用 Eloquent 模型更新单个 JSON 键:
$user = User::find(1);
$user->update(['profile->age' => 30]);

2、同时更新多个 JSON 子字段:
$user->update([
  'profile->age' => 30,
  'profile->city' => 'Shanghai'
]);

3、使用 DB facade 进行批量更新:
DB::table('users')->where('id', 1)->update(['profile->status' => 'active']);

四、插入全新的 JSON 数据记录

当创建新记录时,可以直接将数组形式的数据赋值给 JSON 字段,Laravel 会自动将其编码为 JSON 格式存储到数据库中。

1、定义允许批量赋值的属性(在模型中):
protected $fillable = ['name', 'profile'];

2、创建一条包含 JSON 数据的新记录:
User::create([
  'name' => 'John Doe',
 &nbsp'profile' => ['age' => 28, 'city' => 'Guangzhou', 'skills' => ['PHP', 'Laravel']]
]);

3、确保数据库表结构已定义 profile 字段为 JSON 类型,以保证正确存储。

五、使用 JSON 数组函数进行高级查询

MySQL 提供了多种内置函数用于操作 JSON 数据,如 JSON_CONTAINS、JSON_EXTRACT 等,可在 Laravel 中结合原始表达式使用。

1、查找 JSON 数组中包含特定值的记录:
DB::table('users')->whereRaw('JSON_CONTAINS(profile->"$.skills", ?)', ['"Laravel"'])->get();

2、提取并返回 JSON 中的某个字段作为结果的一部分:
DB::table('users')->select(DB::raw('JSON_EXTRACT(profile, "$.age") as age'))->get();

3、使用 JSON_SEARCH 查找某个字符串在 JSON 数组中的位置:
DB::table('users')->whereRaw('JSON_SEARCH(profile->"$.skills", "one", ?) is not null', ['Laravel'])->get();

以上就是laravel怎么实现JSON字段的查询和更新_laravel JSON字段查询与更新方法的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号