【TP5学习笔记二】模型修改器和读取器
(PS:文章内源码均来自官方文档)
现在所有的项目都是会把时间存成时间戳格式,取出的时候还要转换
这时候就可以应用到读取器这个功能。
读取器的命名规则是:驼峰 ,get+字段名+Attr
例如:getBirthdayAttr;
比如我要获取生日。那么可以如下操作:
1 2 3 4 5 6 7 8 9 10 11 | <?php namespace app\index\model; use think\Model; class User extends Model { // birthday读取器 protected function getBirthdayAttr( $birthday ) { return date ( 'Y-m-d' , $birthday ); } } |
这样我们获取到的生日就是“年-月-日”格式的:
1 2 3 4 5 6 7 | public function read( $id = '' ) { $user = UserModel::get( $id ); echo $user ->nickname . '<br/>' ; echo $user ->email . '<br/>' ; echo $user ->birthday . '<br/>' ; } |
读取器还可以定义读取数据表中不存在的属性,例如把原始生日和转换的格式分开两个属性 birthday 和 user_birthday ,我们只需定义 user_birthday 属性的读取器方法:
1 2 3 4 5 6 7 8 9 10 11 | <?php namespace app\index\model; use think\Model; class User extends Model { // user_birthday读取器 protected function getUserBirthdayAttr( $value , $data ) { return date ( 'Y-m-d' , $data [ 'birthday' ]); } } |
这时候我们直接在控制器中echo $data->user_birthday; 就可以输出Y-m-d格式的时间。
修改器:
由于很多时候我们在前端获取到的时间是字符串类型,而我们需要进行strtotime()处理,所以在插入数据库之前,我们通过修改器直接将数据格式转换成我们需要的。
修改器方法的命名规范是:set + 属性名的驼峰命名+ Attr。
我们在模型中添加:
1 2 3 4 | protected function setBirthdayAttr( $value ) { return strtotime ( $value ); } |
在控制器中添加数据的时候:
1 2 3 4 5 6 7 8 9 10 11 12 | public function add() { $user = new UserModel; $user ->nickname = '流年' ; $user ->email = 'thinkphp@qq.com' ; $user ->birthday = '1977-03-05' ; if ( $user ->save()) { return '用户[ ' . $user ->nickname . ':' . $user ->id . ' ]新增成功' ; } else { return $user ->getError(); } } |
插入的数据birthday是时间戳格式的
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 本地部署 DeepSeek:小白也能轻松搞定!
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 普通人也能轻松掌握的20个DeepSeek高频提示词(2025版)