• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 详解thinkPHP5模型中的修改器和自动完成

详解thinkPHP5模型中的修改器和自动完成

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了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);    }}

运行后数据库多了记录,密码字段是经过密码修改器改变后的值。


6024c2b248046.jpg


二、自动完成

实际开发中创建的表字段基本都存在需要自动完成的字段,如记录创建时间、更新时间、创建人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' => 'Emrys',            'password' => 'emrys',            'email' => 'emrys126.com',            'mobile' => '13955555555',            'sex' => 1,            'age' => 18        ];                 //添加用户数据        $res = User::create($data);        dump($res);    }}

执行上述添加数据代码的time、create_time、update_time三字段的运行结果如下图所示,添加数据时time和create_time字段均插入当前时间,update_time是默认值0.


6024c3762693c.jpg


控制器中更新数据的代码:

namespace app\index\controller;use think\Controller;use app\index\model\User;class Index extends Controller{    public function index(){        //更新数据        $user = User::get(12);        $user->age = 120;        $res = $user->save();        dump($res);    }}

执行上方的更新数据代码后,update_time字段添加了当前时间,time字段的值也更新为当前时间,create_time的值未发生改变。


6024c3b8f11ce.jpg


使用修改器的方式实现自动完成功能需要在每个模型中添加各字段的修改器,这样造成代码臃肿。 tp5为此有专门的配置,在数据库连接配置文件database.php中的auto_timestamp = false项,改为true,即可在每个表中进行create_time、update_time的自动完成。由于不是每个表中一定存在create_time和update_time字段,因此tp5也提供了在模型中配置的方法。

//开启自动写入时间戳protected $autoWriteTimestamp = true; //默认的时间戳是create_time和update_time,可通过如下进行修改。如果不想在插入或更新数据时添加该字段的值,则设置为falseprotected $createTime = false;protected $updateTime = '这里是真实表中的更新时间字段';



分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解thinkPHP5模型中的修改器和自动完成

相关文章

  • 2022-04-29js如何获取UEditor富文本编辑器中的图片地址
  • 2022-04-29千万不要让搜素引擎误认为买卖链接了
  • 2022-04-29PHP保存数组到数据库
  • 2022-04-29PhotoShop制作魔幻霓虹火焰字效果的教程
  • 2022-04-29带你了解HTML5 SVG,看看怎么绘制自适应的菱形
  • 2022-04-29vue实现一个获取按键展示快捷键效果的Input组件
  • 2022-04-29总结分享一些基于jQuery的前端面试(含移动端常见问题)
  • 2022-04-29百度蜘蛛是怎样来判断文章质量的?
  • 2022-04-29JavaScript 如何实现横向瀑布流
  • 2022-04-29如何解决微信公众平台php乱码问题

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • PHPcms v9调用热门文章的两种方法
    • 浅析小程序中reLaunch跳转报错怎么解决
    • Workerman中你不得不知道的属性reusePort
    • 如何将JS对象与jQuery对象进行相互转换
    • WordPress使用OSS Upload后媒体库无法加载一直转圈解决方法
    • Photoshop制作立体效果的草莓艺术字
    • PHP让人不知道的匿名函数的几种写法(附代码)
    • #1045 无法登录 MySQL 服务器的解决方法
    • Photoshop绘制任天堂Wii游戏手柄
    • Oracle怎么将日期转为字符串

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有