网站

thinkphp5 模型中定义读取器与写入器

分类 :thinkphp5     2019-04-15 人气:0 0条评论

读取器与修改器都是在模型中定义,定义后在方法中使用时会自动调用该方法。
读取器的应用:如我们写了一个程序有省、市、县、区与详细地址的信息,我们需要在显示的地方是将这些信息拼接出来,那么便可以在模型中定义一个地址读取器,在里面拼接好,

读取器

读取器命名规范:get+属性名的驼峰命名+Attr
如我们方法中有一个$Tp->name;属性名,(其中name字段名),那么可命名为getNameAttr($属性值参数,$所有数据参数){}
如果属性名是$Tp->reg_time,那么命名则是getRegTimeAttr($传入参数){}

注:

  • $属性值参数名称随意,所传入的值便是方法中得到的值
  • $所有数据参数名称随意,里面的数值是程序根据我们的查询语句自动查询到到当前表中所有字段某行某列字段的数据值,可用$所有数据参数['字段名']调用 
  • 传入一个参数或两个参数都可

定义读取器

protected function getNewtimeAttr($value)
    {
        return date('Y-m-d',$value);  //时间戳改变
    }
方法中输出newtime
echo $tp->newtime;
输出结果为
2016-08-30
newtime字段中存的值是1472486400,通过自定义的读取器输出为正常的时间

接着我们举一个双参数的

定义读取器

protected function getIdAttr($value,$data2)
	{
	    return "你的ID是:".$value."--姓名:".$data2['name']; 
	}
方法中语句
echo $tp->id;
输出为
你的ID是:1--姓名:春分

写入器

命名规范:set+属性名的驼峰命名+Attr

一看名字便知道,写入器是在添加、修改数据时使用的

定义写入器

protected function setNewtimeAttr($value)
	{
		return strtotime($value);
	}
方法中语句
$tp->newtime = "2019-04-15";
$tp->save();
存放数据库后是:1555257600时间戳语句

修改器判断后处理的方式

模型中添加一个sex修改器
protected function setSexAttr($value,$data)
	{
		//修改时进行一下判断后再将填入的值写入
		return $data['pic'] == 'boy.jpg' ? 1:0;
	}
第5条内容修改设置
$tp = Tp::get(5);
		$tp->sex = 1;
		$tp->save();
第5条内容的pic为空,所以虽然我们想将sex修改为1,但修改结果为0

评论

大侠名号:   验证暗号: 点击我更换图片

继续阅读