站长图库向大家介绍了thinkPHP5模型,修改器,自动完成等相关知识,希望对您有所帮助
一、修改器
实际开发过程中,一些字段在存储到表中时需要做些修改,如用户注册时填写的密码在表中存储时需要加密,修改器因此产生。
修改器同获取器类似,需要写在模型中,其命名规则为set + 字段名(按驼峰法) + Attr。
实例:添加用户时,用户的密码需要加密
创建用户表
CREATE TABLE `tp_user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(60) NOT NULL DEFAULT '', `password` char(32) NOT NULL DEFAULT '', `mobile` varchar(15) NOT NULL DEFAULT '' COMMENT '用户手机号', `email` varchar(100) NOT NULL DEFAULT '', `sex` tinyint(3) NOT NULL DEFAULT '0' COMMENT '性别 0未知 1男 2女', `age` tinyint(3) unsigned NOT NULL DEFAULT '0', `time` int(10) NOT NULL DEFAULT '0' COMMENT '时间', `create_time` int(10) NOT NULL DEFAULT '0' COMMENT '创建时间', `update_time` int(10) NOT NULL DEFAULT '0' COMMENT '更新时间', `status` tinyint(3) NOT NULL DEFAULT '1' COMMENT '记录状态 -1删除 0禁用 1正常', PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
模型中添加密码修改器:
namespace app\index\model;use think\Model;class User extends Model{ //密码的修改器 public function setPasswordAttr($val){ //此处做一些对用户传入值的处理 return md5($val); }}控制器中添加用户数据:
namespace app\index\controller;use think\Controller;use app\index\model\User;class Index extends Controller{ public function index(){ //模拟传入的post表单数据 $data = [ 'username' => 'Emrys', 'password' => 'emrys', 'email' => 'emrys126.com', 'mobile' => '13955555555', 'sex' => 1, 'age' => 18 ]; //添加用户数据 $res = User::create($data); dump($res); }}运行后数据库多了记录,密码字段是经过密码修改器改变后的值。

二、自动完成
实际开发中创建的表字段基本都存在需要自动完成的字段,如记录创建时间、更新时间、创建人id(登录用户的id)等,这时就需要用到表的自动完成功能。自动完成包括插入和更新时都自动完成、插入时自动完成、更新时自动完成三种,其设置是在模型中使用
//插入和更新时均自动完成的字段protected $auto = []; //只在插入时自动完成的字段protected $insert = []; //只在更新时自动完成的字段protected $update = [];
现设置time字段在插入和更新时均自动完成、create_time字段在插入时自动完成、update_time字段在更新时自动完成。自动完成设置如下:
namespace app\index\model;use think\Model;class User extends Model{ //自动完成,插入和更新时都自动执行 protected $auto = [ 'time' ]; //只在插入时完成 protected $insert = [ 'create_time' ]; //只在数据更新时完成 protected $update = [ 'update_time' ]; //获取器 public function getSexAttr($val){ switch ($val) { case '1': return '男'; break; case '2': return '女'; break; default: return '保密'; break; } } //密码的修改器 public function setPasswordAttr($val){ return md5($val); } //时间修改器 public function setTimeAttr(){ return time(); } //创建时间修改器 public function setCreateTimeAttr(){ return time(); } //更新时间修改器 public function setUpdateTimeAttr(){ return time(); }}控制器中添加数据、更新数据完成测试
namespace app\index\controller;use think\Controller;use app\index\model\User;class Index extends Controller{ public function index(){ //模拟传入的post表单数据 $data = [ 'username'&nbs

