ThinkPHP 8 操作JSON数据

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客

《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书

使用VS Code开发ThinkPHP项目-CSDN博客

编程与应用开发_夏天又到了的博客-CSDN博客

我们学习了通过调用json()方法来设置JSON字段。然而,每次操作JSON字段都需要调用json()方法显得有些烦琐,为了简化这一过程,我们可以使用模型的$json属性来直接进行操作,示例如下(读者可以自行编写一个简单的控制器来测试示例):

复制代码
<?php
namespace app\model;

use think\Model;
class User extends Model
{
	protected $json = ['address'];
	protected $jsonAssoc = true; // 可选
	protected $jsonType = [ // 设置字段类型
    		'address->code'	=>	'int'		
    ];
}

上例中,jsonAssoc属性是用来控制JSON字段的返回类型,其默认值为false,返回对象形式,我们可以将jsonAssoc属性设置为true,使其通过数组方式操作JSON字段。

jsonType字段和type字段类似,用来指定JSON子字段的数据类型,在不指定的情况下,默认都视为STRING。上面的例子中,我们指定了address->code为整型。

  1. 查询操作

下面是一个查询省份为北京市的用户示例:

复制代码
$user = User::where('address->province', '北京市')->find();
echo $user->username; 					// test
echo $user->address->code; 				// 100000
echo $user->address-> province; 		// 北京市
// 下面设置$jsonAssoc为true的示例
echo $user->address['code']; 			// 100000
echo $user->address['province']; 		// 北京市

在示例中,$user->address'code'中的"->"是访问模型的address属性,'code'是使用数组形式访问address这个JSON属性的code字段。

  1. 更新操作

下面是一个更新用户地址的示例:

复制代码
$user = User::find(1);
$user->address->provice = '广东省';
// 下面是设置$jsonAssoc为true的示例
$user->address = [
	'province' => '广东省'
];
$user->save();
  1. 插入操作

下面是一个新增用户的示例:

复制代码
$user = new User;
$user->address = new \StdClass();
$user->address->province = '北京市';
$user->save();
// 下面是设置$jsonAssoc为true的示例
$user = new User;
$user->address = [
	'province' => '北京市'
];
$user->save();

通过预先定义json和jsonAssoc字段,可以减少一部分重复调用json()方法的工作,进而提高开发效率。因此,我们建议各位读者将其纳入常见开发实践中,使自己的开发更加高效!

相关推荐
漠月瑾-西安1 小时前
PHP曝出两个严重RCE漏洞:CVE-2026-109618、CVE-2026-109619技术分析与修复指南
网络安全·php·漏洞分析·漏洞修复·远程代码执行
大文说跨境7 小时前
亚马逊多店铺的图片素材怎么批量去重:EXIF 与哈希的处理流程
开发语言·php
上海运维Q先生8 小时前
PHP8.3.36升级修复手册----CVE-2026-109618 CVE-2026-109619
运维·php
2401_885885048 小时前
芬兰语音通知接口怎样对接?语音提醒接入流程
android·前端·python·php·语音识别
Flynt11 小时前
PHP 9.2 分 RCE 的补丁比公告早公开 3 天,我读完 389 个文件的 diff,也把"死在代码之前"跑了出来
安全·php·源码
萌动的小火苗12 小时前
MQTT的QoS0、QoS1、QoS2有什么区别?
开发语言·网络·python·php·信息与通信
silvamux_12 小时前
10款模型写“君幸食”讲解词:统一事实档案与逐款审校
开发语言·php
Smoothcloud润云13 小时前
GPU远程纳管节点频繁离线?心跳、DNS与时钟排障实战
运维·服务器·开发语言·人工智能·php·gpu算力
ESDWAN13 小时前
企业访问海外系统很慢,如何一步步定位问题?
服务器·网络·php
企业解惑小助手13 小时前
上网行为审计日志保存6个月怎么落地:从合规要求到存储架构
网络·架构·php