(PS:文章內源碼均來自官方文檔)
現在所有的項目都是會把時間存成時間戳格式,取出的時候還要轉換
這時候就可以應用到讀取器這個功能。
讀取器的命名規則是:駝峰 ,get+字段名+Attr
例如:getBirthdayAttr;
比如我要獲取生日。那么可以如下操作:
<?php namespace app\index\model; use think\Model; 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 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。
我們在模型中添加:
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是時間戳格式的