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 相关文章推荐
玩转图像函数库―常见图形操作
Sep 03 PHP
消息持续发送的完整例子
Oct 09 PHP
php读取mysql的简单实例
Jan 15 PHP
PHP学习笔记之字符串编码的转换和判断
May 22 PHP
php实现与erlang的二进制通讯实例解析
Jul 23 PHP
php查询mysql大量数据造成内存不足的解决方法
Mar 04 PHP
PHP实现递归无限级分类
Oct 22 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
Mar 16 PHP
laravel自定义分页效果
Jul 23 PHP
PHP实现非阻塞模式的方法分析
Jul 26 PHP
使用PHPWord生成word文档的方法详解
Jun 06 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 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
php中的MVC模式运用技巧
2007/05/03 PHP
简单的php缓存类分享     php缓存机制
2014/01/22 PHP
php阻止页面后退的方法分享
2014/02/17 PHP
PHP图像处理类库及演示分享
2015/05/17 PHP
PHP实现多级分类生成树的方法示例
2017/02/07 PHP
使用PHP+MySql实现微信投票功能实例代码
2017/09/29 PHP
详解laravel安装使用Passport(Api认证)
2018/07/27 PHP
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
2021/03/09 Javascript
一个小型js框架myJSFrame附API使用帮助
2008/06/28 Javascript
JS 控制非法字符的输入代码
2009/12/04 Javascript
javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
2012/07/25 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
js将当前时间格式转换成时间搓(自写)
2013/09/26 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
AngularJS 限定$scope的范围实例详解
2017/06/23 Javascript
快速了解vue-cli 3.0 新特性
2018/02/28 Javascript
通过cordova将vue项目打包为webapp的方法
2019/02/02 Javascript
nodejs使用async模块同步执行的方法
2019/03/02 NodeJs
详解vuex数据传输的两种方式及this.$store undefined的解决办法
2019/08/26 Javascript
vue+elementUI动态生成面包屑导航教程
2019/11/04 Javascript
vue组件添加事件@click.native操作
2020/10/30 Javascript
Python命名空间详解
2014/08/18 Python
python 内置函数filter
2017/06/01 Python
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
python代码 输入数字使其反向输出的方法
2018/12/22 Python
python使用Paramiko模块实现远程文件拷贝
2019/04/30 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
一些.net面试题
2014/10/06 面试题
工作室成员个人发展规划范文
2014/01/24 职场文书
政协工作总结2015
2015/05/20 职场文书
神秘岛读书笔记
2015/07/01 职场文书
婚宴父母致辞
2015/07/27 职场文书
中国文明网2015年“向国旗敬礼”活动网上签名寄语
2015/09/24 职场文书