0

0

Hyperf模型访问器怎么定义_Hyperf属性访问器方法【技巧】

絕刀狂花

絕刀狂花

发布时间:2026-03-12 22:23:31

|

508人浏览过

|

来源于php中文网

原创

hyperf模型访问器怎么定义_hyperf属性访问器方法【技巧】

Hyperf 模型中的访问器(Accessor)用于在读取模型属性时自动处理、格式化数据,比如拼接字段、转大小写、格式化时间等。它不是靠 PHP 的 magic method __get 直接触发,而是由 Hyperf 数据库模型基类 Hyperf\Database\Model\Model__get() 中统一拦截,并按命名规则查找并调用对应方法。

访问器的命名与定义方式

必须严格遵循 get{AttributeName}Attribute 格式,其中 AttributeName 是「驼峰命名」的字段名(首字母大写),且不带下划线。Hyperf 会自动将数据库字段如 user_name 映射为 userName,再匹配 getUserNameAttribute

  • 数据库字段是 full_name → 访问器方法名应为 getFullNameAttribute
  • 字段是 created_at → 方法名为 getCreatedAtAttribute(注意不是 getCreatedAtAttribute 写成 getCreated_AtAttribute
  • 方法参数 $value 是从数据库取出的原始值(可能为 null)

访问器中如何安全使用原始值

数据库字段名错误或字段为空时,Hyperf 默认静默返回 null,不会报错。因此访问器内需主动判空,避免后续类型错误或逻辑中断。

Tago AI
Tago AI

AI生成带货视频,专为电商卖货而生

下载
  • is_null($value)isset($value) 判断原始值是否有效
  • 对字符串操作前加 !empty($value),防止 ucfirst(null) 返回空字符串却掩盖问题
  • 若需默认值,直接在访问器中返回,例如:return $value ?? '未知用户';

常见实用场景示例

以下写法均放在模型类(如 App\Model\User)内部:

  • 拼接姓名public function getFullNameAttribute($value) { return "{$this->attributes['first_name']} {$this->attributes['last_name']}"; }
  • 格式化手机号public function getPhoneAttribute($value) { return $value ? substr_replace($value, '****', 3, 4) : ''; }
  • 日期转中文显示public function getCreatedAtAttribute($value) { return $value ? date('Y年m月d日', strtotime($value)) : ''; }

注意事项与避坑点

访问器只影响「读取」,不影响数据库存储;它不会改变 $model->toArray()$model->jsonSerialize() 的默认行为,除非你重写了这些方法。

  • 不要在访问器里调用 $this->save() 或触发其他写操作,会造成不可预知的循环
  • 避免在访问器中做耗时操作(如远程请求、复杂计算),否则每次获取属性都会执行
  • 若字段本身是 JSON 类型,Hyperf 会自动解码,访问器收到的是数组/对象,无需再 json_decode
  • 访问器方法必须是 public,且不能有类型声明(如 string 返回类型),否则可能被忽略

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

457

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

547

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

335

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1030

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1089

2024.03.01

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Swoole系列-从0到1-新手进阶
Swoole系列-从0到1-新手进阶

共29课时 | 1.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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