TP5模型修改器和讀取器
現在所有的專案都是會把時間存成時間戳格式,取出的時候還要轉換
這時候就可以應用到讀取器這個功能。
讀取器的命名規則是:駝峰 ,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 = '[email protected]';
$user->birthday = '1977-03-05';
if ($user->save()) {
return '使用者[ ' . $user->nickname . ':' . $user->id . ' ]新增成功';
} else {
return $user->getError();
}
}
插入的資料birthday是時間戳格式的