早睡早起,方能养生
Sleep early rise early, way to keep healthy

ThinkPHP5.1 获取器的用法简介

super
2021-05-27 18:27
views 3934

文档:

 

获取器的作用是对模型实例的(原始)数据做出自动处理。一个获取器对应模型的一个特殊方法(该方法必须为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



分享
0 条讨论
top