1. 程式人生 > >TP5模型修改器和讀取器

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是時間戳格式的