ThinkPHP5.1 获取器的用法简介

文档:
获取器的作用是对模型实例的(原始)数据做出自动处理。一个获取器对应模型的一个特殊方法(该方法必须为public
类型),方法命名规范为:
getFieldNameAttr
其中get与结尾的Attr是固定的,FieldName为数据表字段的驼峰转换。(举个栗子:如果你的字段名为open_id,那么应定义为getOpenIdAttr)
使用示例1:
数据表:

现在数据表有这么一条数据(如上图),其中nickname是用base64格式存储的(因为微信昵称中有各种奇形怪状的表情符号,你懂得)。【使用mb4格式数据库并不能彻底解决此问题】
如果我们正常查询:
$user_info = UserModel::init()->where('user_id', 1)->find();

查询结果中nickname为base64格式,需要我们自己手动写base64解码,代码不太美观。如果使用了获取器,就非常方便了,且代码将会变得更加简明。
1)首先在UserModel里面新建一个 getNicknameAttr 方法
public function getNicknameAttr()
{
}
2)定义的获取器会有一个默认参数 为查询的当前字段的值。我们在获取器的内部 处理数据并返回
public function getNicknameAttr($value)
{
return base64_decode($value);
}
3)ok,获取器定义完成。重新请求并打印结果

哎,这样不经过我们再手动处理了,在这个Model中,不管任何function,只要查询结果中带有nickname,将会自动进行base64解码处理。同理如果你的数据库中存的格式是json 序列化等格式,也可以使用这种方式。
知识点:
1)查询时,必须使用Model才能使获取器生效,使用db()或者Db::name(),Db::table()获取器是不会生效的
2)更多高级用法,请查阅官方文档:https://www.kancloud.cn/manual/thinkphp5_1/354046
----------------------------------------------------
若有不合理之处,欢迎指出。:D