Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例


Posted in PHP onOctober 11, 2019

本文实例讲述了Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作。分享给大家供大家参考,具体如下:

一、获取器

在model中使用 get+字段名+Attr,可以修改字段的返回值。

数据库中性别保存为,0未知、1男、2女,查询时返回汉字:

model:

//将性别的012修改为未知、男。女返回
public function getSexAttr($val){
    switch($val){
      case '1' :
        return '男';
      case '2':
        return '女';
      default:
        return '未知';
    }
}
//格式化时间戳后返回
public function getAddtimeAttr($val){
    if($val){
      return date('Y-m-d H:i:s',$val);
    }else{
      return $val;
    }
}

controller:

$res = TestUser::get(2);
dump($res->toArray());//性别会被model转化
dump($res->getData());//返回原始数据

二、模型修改器:

在model中使用 set+字段名+Attr,可以修改字段值,方便添加数据时使用。

示例,比如密码需要MD5加密:

model:

//对密码字段加密之后存储
//第一个参数是密码
//第二个参数是添加的数据,可选
public function setPasswordAttr($val,$data){
    if($val === '') {
      return $val;
    }else{
      return md5($val.$data['email']);
    }
}

三、自动完成:

model:

//添加和修改时,都会自动完成的字段
protected $auto = ['addtime'];
public function setAddtimeAttr(){
    return time();
}

三、添加数据时,自动完成:

model:

protected $insert = ['addtime'];
public function setAddtimeAttr(){
    return time();
}

四、修改数据时,自动完成:

model:

protected $update = ['addtime'];
public function setAddtimeAttr(){
    return time();
}

五、自动完成时间戳

在数据库配置文件database.php中,有一项:

// 自动写入时间戳字段
'auto_timestamp' => false,

如果开启,则会自动完成所有表的时间戳,但是不建议这样,只在需要的地方设置更安全。

例如对用户表的时间戳自动完成,就在User的model中设置:

<?php
namespace app\index\model;
use think\Model;
class User extends Model{
  //开启自动完成时间戳功能
  protected $autoWriteTimestamp = true;
  //开启后,
  //添加数据时,默认自动完成的字段是:create_time和update_time。
  //修改数据时,默认自动完成的字段是:update_time。
  //如果数据库不是这两个字段,则会报错
  //如果不想用这两个字段,可以进行如下修改
  protected $createTime = 'addtime';//修改默认的添加时间字段
  protected $updateTime = 'updtime';//修改默认的修改时间字段
 protected $updateTime = false;//当不需要这个字段时设置为false
}

六、软删除

软删除:当删除条记录时,有时我们需要假删除,只通过修改某个字段状态来标记记录已删除。

model:

<?php
namespace app\index\model;
use think\Model;
use traits\model\SoftDelete;//引入软删除的类
class User extends Model{
  //使用软删除
  //删除时,默认更新的字段是delete_time
  use SoftDelete;
  //如果修改修改默认的字段名字
  protected $deleteTime = 'deltime';
}

控制器:

$res = User::destroy(1);//软删除
//返回影响的行数
dump($res);

执行删除后,就会更新delete_time字段,如果update_time字段也开启了自动完成,也会更新update_time字段。

//获取所有数据,会过滤掉delete_time不为null的记录(即软删除的记录不会显示)
//注意,delete_time字段默认值要设置为null,不能设置为0,否则0页会被视为软删除过的数据
$res = $model->select();
//如果需要获取包含软删除的数据,使用withTrashed(true)。
$res = User::withTrashed(true)->select();
//如果需要获取软删除过的数据
$res = User::onlyTrashed()->select();
//删除id是15的记录,如果开启软删除,会进行假删除
$res = User::destroy(15);
//如果开启了软删除,需要真正地删除数据,不做软删除
//destory()第二个参数传递true
$res = User::destroy(15,true);
//delete()参数传递true
$userData = User::get(15);
$userData->delete(true);

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
dedecms 制作模板中使用的全局标记图文教程
Mar 11 PHP
PHP Undefined index报错的修复方法
Jul 17 PHP
xss防御之php利用httponly防xss攻击
Mar 21 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
Feb 14 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
Dec 07 PHP
PHP+swoole实现简单多人在线聊天群发
Jan 19 PHP
利用PHP如何写APP接口详解
Aug 23 PHP
php 魔术常量详解及实例代码
Dec 04 PHP
详解PHP数据压缩、加解密(pack, unpack)
Dec 17 PHP
php使用变量动态创建类的对象用法示例
Feb 06 PHP
PHP实现的装箱算法示例
Jun 23 PHP
浅谈php的TS和NTS的区别
Mar 13 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
Oct 11 #PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
Oct 11 #PHP
基于Laravel(5.4版本)的基本增删改查操作方法
Oct 11 #PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
Oct 11 #PHP
Thinkphp5.0 框架Model模型简单用法分析
Oct 11 #PHP
laravel 判断查询数据库返回值的例子
Oct 11 #PHP
PHP实现通过二维数组键值获取一维键名操作示例
Oct 11 #PHP
You might like
索尼SONY SRF-S83/84电路分析和打磨
2021/03/02 无线电
php SQL Injection with MySQL
2011/02/27 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
2011/05/07 PHP
php继承中方法重载(覆盖)的应用场合
2015/02/09 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
2015/03/17 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
2020/04/29 PHP
基于jQuery的表格操作插件
2010/04/22 Javascript
ajax中get和post的说明及使用与区别
2012/12/23 Javascript
js call方法详细介绍(js 的继承)
2013/11/18 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
jQuery实现在textarea指定位置插入字符或表情的方法
2015/03/11 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
浅谈JavaScript find 方法不支持IE的问题
2017/09/28 Javascript
Three.JS实现三维场景
2018/12/30 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
js实现鼠标滑动到某个div禁止滚动
2020/09/17 Javascript
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
Python类的专用方法实例分析
2015/01/09 Python
python僵尸进程产生的原因
2017/07/21 Python
Django框架多表查询实例分析
2018/07/04 Python
Python实现E-Mail收集插件实例教程
2019/02/06 Python
python实现得到当前登录用户信息的方法
2019/06/21 Python
Python如何使用函数做字典的值
2019/11/30 Python
python 实现倒计时功能(gui界面)
2020/11/11 Python
Python 用__new__方法实现单例的操作
2020/12/11 Python
CSS3教程(5):网页背景图片
2009/04/02 HTML / CSS
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
会计助理岗位职责
2014/02/17 职场文书
六一儿童节主持词
2014/03/21 职场文书
劳动竞赛活动总结
2014/05/05 职场文书
外贸业务员求职信
2014/06/16 职场文书
实习单位鉴定意见
2015/06/04 职场文书
2015年全民创业工作总结
2015/07/23 职场文书
实验心得体会范文
2016/01/25 职场文书