6-14ThinkPHP5模型的读取器与修改器:getAttr()和setAttr()

6-14ThinkPHP5模型的读取器与修改器:getAttr()和setAttr()

笑奸蕾味窍坝拷媚泰锤练纳勤

6-14ThinkPHP5模型的读取器与修改器:getAttr()和setAttr()第1张

数据库下载:

数据表信息:

6-14ThinkPHP5模型的读取器与修改器:getAttr()和setAttr()第2张

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        //输出陈近南的个人信息
        $staff=Staff::get(19);
        return $staff->name."的入职时间是:".$staff->hiredate;
    }
}

执行:

6-14ThinkPHP5模型的读取器与修改器:getAttr()和setAttr()第3张

将unix时间戳转换为时间格式

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        //输出陈近南的个人信息
        $staff=Staff::get(19);
        return $staff->name."的入职时间是:".date('Y-m-d',$staff->hiredate);
    }
}

执行:

6-14ThinkPHP5模型的读取器与修改器:getAttr()和setAttr()第4张

date()函数支持更多花样:

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        //输出陈近南的个人信息
        $staff=Staff::get(19);
        return $staff->name."的入职时间是:".date('Y年m月d日 H时i分s秒',$staff->hiredate);
    }
}

执行:

6-14ThinkPHP5模型的读取器与修改器:getAttr()和setAttr()第5张

这种操作每一次都要写会很麻烦,可以在模型中设置读取器方法一次搞定

6-14ThinkPHP5模型的读取器与修改器:getAttr()和setAttr()第6张

获取器可以这样写

<?php
namespace app\index\model;
use think\Model;//引入Model类
class Staff extends Model
{
    protected function getHiredateAttr($hiredate)
    {
        return date('Y年m月d日 H时i分s秒',$hiredate);
    }
}

或者:

<?php
namespace app\index\model;
use think\Model;//引入Model类
class Staff extends Model
{
    protected function getHireDateAttr($hiredate)
    {
        return date('Y年m月d日 H时i分s秒',$hiredate);
    }
}

D:\phpStudy\PHPTutorial\WWW\tp5\application\index\controller\Index.php:

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        //输出陈近南的个人信息
        $staff=Staff::get(19);
        return $staff->name."的入职时间是:".$staff->hiredate;
    }
}

执行:

6-14ThinkPHP5模型的读取器与修改器:getAttr()和setAttr()第7张


获取器还支持传入第二个参数$data

D:\phpStudy\PHPTutorial\WWW\tp5\application\index\model\Staff.php:

<?php
namespace app\index\model;
use think\Model;//引入Model类
class Staff extends Model
{
    protected function getHiredateAttr($hiredate,$data)
    {
        //data保存着当前模型所有的原始数据,data['name']即对应着数据表中的name字段
        return $data['name']."的入职时间是:".date('Y年m月d日 H时i分s秒',$hiredate);
    }
}

执行:

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        //输出陈近南的个人信息
        $staff=Staff::get(19);
        return $staff->hiredate;
    }
}

执行:

6-14ThinkPHP5模型的读取器与修改器:getAttr()和setAttr()第8张

解释:Index.php中,代码执行到:

return $staff->hiredate;

即获取hiredate属性时,触发模型Staff.php中的获取器getHiredateAttr($hiredate,$data)

在函数体中输出相关信息

6-14ThinkPHP5模型的读取器与修改器:getAttr()和setAttr()第9张


6-14ThinkPHP5模型的读取器与修改器:getAttr()和setAttr()第10张

修改器:即对数据库进行写操作时触发

添加左冷禅

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        $staff=new Staff();
        $staff->name="左冷禅";
        $staff->salary=5000;
        $staff->hiredate=strtotime('2014-10-23');
        if($staff->save())
        {
            return "新员工".$staff->name."ID:".$staff->id."添加成功";
        }
        else
        {
            $staff->getError();
        }

    }
}

执行:

6-14ThinkPHP5模型的读取器与修改器:getAttr()和setAttr()第11张

6-14ThinkPHP5模型的读取器与修改器:getAttr()和setAttr()第12张

从数据表中删除左冷禅

在模型中设置设置器,使得时间字符串自动转化为unix时间戳

6-14ThinkPHP5模型的读取器与修改器:getAttr()和setAttr()第13张

<?php
namespace app\index\model;
use think\Model;//引入Model类
class Staff extends Model
{
    //获取器,获取hiredate属性时自动触发
    protected function getHiredateAttr($hiredate,$data)
    {
        //data保存着当前模型所有的原始数据,data['name']即对应着数据表中的name字段
        return $data['name']."的入职时间是:".date('Y年m月d日 H时i分s秒',$hiredate);
    }
    //设置器,设置hiredate属性时自动触发
    protected function setHiredateAttr($hiredate)
    {
        return strtotime($hiredate);
    }
}

D:\phpStudy\PHPTutorial\WWW\tp5\application\index\controller\Index.php:

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        $staff=new Staff();
        $staff->name="左冷禅";
        $staff->salary=5000;
        $staff->hiredate='2014-10-23';
        if($staff->save())
        {
            return "新员工".$staff->name."ID:".$staff->id."添加成功";
        }
        else
        {
            $staff->getError();
        }

    }
}

执行:

6-14ThinkPHP5模型的读取器与修改器:getAttr()和setAttr()第14张

6-14ThinkPHP5模型的读取器与修改器:getAttr()和setAttr()第15张

6-14ThinkPHP5模型的读取器与修改器:getAttr()和setAttr()第16张


6-14ThinkPHP5模型的读取器与修改器:getAttr()和setAttr()第17张


世芹氰苏尸海莲立挪巢畅蹋酞