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 相关文章推荐
php google或baidu分页代码
Nov 26 PHP
php 计算两个时间戳相隔的时间的函数(小时)
Dec 18 PHP
php Smarty初体验二 获取配置信息
Aug 08 PHP
MySQL时间字段究竟使用INT还是DateTime的说明
Feb 27 PHP
php设置session值和cookies的学习示例
Mar 21 PHP
php json转换成数组形式代码分享
Nov 10 PHP
php写入、删除与复制文件的方法
Jun 20 PHP
php根据日期显示所在星座的方法
Jul 13 PHP
thinkphp jquery实现图片上传和预览效果
Jul 22 PHP
php高清晰度无损图片压缩功能的实现代码
Dec 09 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
Mar 07 PHP
Laravel框架下载,安装及路由操作图文详解
Dec 04 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数组排序函数归纳
2016/08/08 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
基于PHP制作验证码
2016/10/12 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
php和nginx交互实例讲解
2019/09/24 PHP
js字母大小写转换实现方法总结
2013/11/13 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
2013/12/31 Javascript
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
一个支持任意尺寸的图片上下左右滑动效果
2014/08/24 Javascript
使用Javascript简单实现图片无缝滚动
2014/12/05 Javascript
使用Node.js实现HTTP 206内容分片的教程
2015/06/23 Javascript
jquery淡入淡出效果简单实例
2016/01/14 Javascript
JS加载iFrame出现空白问题的解决办法
2016/05/13 Javascript
Bootstrap显示与隐藏简单实现代码
2017/03/06 Javascript
JQuery 获取Dom元素的实例讲解
2017/07/08 jQuery
vue 2.0封装model组件的方法
2017/08/03 Javascript
jquery实现左右轮播图效果
2017/09/28 jQuery
vue移动端路由切换实例分析
2018/05/14 Javascript
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
Jquery实现获取子元素的方法分析
2019/08/24 jQuery
JavaScript, select标签元素左右移动功能实现
2020/05/14 Javascript
解决Vue项目中tff报错的问题
2020/10/21 Javascript
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
Python语言技巧之三元运算符使用介绍
2013/03/04 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
Python requests及aiohttp速度对比代码实例
2020/07/16 Python
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
介绍一下Make? 为什么使用make
2016/07/31 面试题
模具毕业生推荐信
2014/02/15 职场文书
巡警年度自我鉴定
2014/02/21 职场文书
消防安全责任书范本
2014/04/15 职场文书
学习保证书100字
2015/02/26 职场文书
上下班时间调整通知
2015/04/23 职场文书
2015年行政人事工作总结
2015/05/21 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书
分享几种python 变量合并方法
2022/03/20 Python