(PS:文章内源码均来自官方文档)
现在所有的项目都是会把时间存成时间戳格式,取出的时候还要转换
这时候就可以应用到读取器这个功能。
读取器的命名规则是:驼峰 ,get+字段名+Attr
例如:getBirthdayAttr;
比如我要获取生日。那么可以如下操作:
<?php namespace appindexmodel; use thinkModel; class User extends Model { // birthday读取器 protected function getBirthdayAttr($birthday) { return date('Y-m-d', $birthday); } }
这样我们获取到的生日就是“年-月-日”格式的:
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 属性的读取器方法:
<?php namespace appindexmodel; use thinkModel; 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。
我们在模型中添加:
protected function setBirthdayAttr($value) { return strtotime($value); }
在控制器中添加数据的时候:
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是时间戳格式的