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 相关文章推荐
Apache2 httpd.conf 中文版
Nov 17 PHP
php桌面中心(三) 修改数据库
Mar 11 PHP
优化php效率,提高php性能的一些方法
Mar 24 PHP
zend api扩展的php对象的autoload工具
Apr 18 PHP
PHP ignore_user_abort函数详细介绍和使用实例
Jul 15 PHP
smarty中js的调用方法示例
Oct 27 PHP
PHP实现Javascript中的escape及unescape函数代码分享
Feb 10 PHP
详解WordPress中添加友情链接的方法
May 21 PHP
PHP中串行化用法示例
Nov 16 PHP
PHP实现的简单在线计算器功能示例
Aug 02 PHP
Laravel事件监听器用法实例分析
Mar 12 PHP
php判断IP地址是否在多个IP段内
Aug 18 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
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
分享5个非常有用的Laravel Blade指令
2018/05/30 PHP
javascript offsetX与layerX区别
2010/03/12 Javascript
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
JS中引用百度地图并将百度地图的logo和信息去掉
2013/09/29 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
javascript几个易错点记录
2014/11/26 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
2015/03/24 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
nodejs 的 session 简单使用
2016/06/06 NodeJs
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
2018/02/07 Javascript
Vue.js 动态为img的src赋值方法
2018/03/14 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
2018/05/12 Javascript
不得不知的ES6小技巧
2018/07/28 Javascript
用POSTMAN发送JSON格式的POST请求示例
2018/09/04 Javascript
vue-自定义组件传值的实例讲解
2018/09/18 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
2020/02/15 Javascript
JS面向对象编程实现的拖拽功能案例详解
2020/03/03 Javascript
Python while 循环使用的简单实例
2016/06/08 Python
详解tensorflow实现迁移学习实例
2018/02/10 Python
python smtplib模块自动收发邮件功能(一)
2018/05/22 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
美国知名女性服饰品牌:New York & Company
2017/03/23 全球购物
为什么要优先使用同步代码块而不是同步方法?
2013/01/30 面试题
房地产员工找工作的自我评价
2013/11/15 职场文书
求职信范文英文版
2014/01/05 职场文书
商场消防演习方案
2014/02/12 职场文书
观看建国大业观后感
2015/06/01 职场文书
运动会新闻稿
2015/07/17 职场文书
2019已经过半,你知道年中工作总结该怎么写吗?
2019/07/03 职场文书
成本低的5个创业项目:投资小、赚钱快
2019/08/20 职场文书
如何用python识别滑块验证码中的缺口
2021/04/01 Python