【TP5學習筆記二】模型修改器和讀取器


 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM