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 相关文章推荐
第十二节--类的自动加载
Nov 16 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
Oct 25 PHP
php添加文章时生成静态HTML文章的实现代码
Feb 17 PHP
php网页标题中文乱码的有效解决方法
Mar 05 PHP
php实现上传图片保存到数据库的方法
Feb 11 PHP
php查询相似度最高的字符串的方法
Mar 12 PHP
Laravel 5框架学习之Blade 简介
Apr 08 PHP
Yii调试查看执行SQL语句的方法
Jul 15 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
Dec 15 PHP
php使用变量动态创建类的对象用法示例
Feb 06 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
Oct 22 PHP
PHP中多字节字符串操作实例详解
Aug 23 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手册及PHP编程标准
2006/12/17 PHP
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
2009/10/29 PHP
PHP程序员基本要求和必备技能
2014/05/09 PHP
PHP使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
2015/08/23 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
javascript读取RSS数据
2007/01/20 Javascript
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
Chrome中JSON.parse的特殊实现
2011/01/12 Javascript
js判断浏览器是否支持html5
2014/08/17 Javascript
jQuery中clone()方法用法实例
2015/01/16 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
jQuery实现三级菜单的代码
2016/05/09 Javascript
基于Node.js的JavaScript项目构建工具gulp的使用教程
2016/05/20 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
详解vue更改头像功能实现
2019/04/28 Javascript
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
Python实现分割文件及合并文件的方法
2015/07/10 Python
全面理解Python中self的用法
2016/06/04 Python
python通过微信发送邮件实现电脑关机
2018/06/20 Python
Python实现将Excel转换成为image的方法
2018/10/23 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
瑞贝卡·明可弗包包官网:Rebecca Minkoff
2016/07/21 全球购物
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
考博专家推荐信
2014/05/10 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
实习指导老师意见
2015/06/04 职场文书
springboot+VUE实现登录注册
2021/05/27 Vue.js
MySQL学习之基础操作总结
2022/03/19 MySQL
MySQL三种方式实现递归查询
2022/04/18 MySQL
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers