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中如何定义和使用常量
Feb 28 PHP
php笔记之:数据类型与常量的使用分析
May 14 PHP
php获取$_POST同名参数数组的实现介绍
Jun 30 PHP
php用header函数实现301跳转代码实例
Nov 25 PHP
php多功能图片处理类分享(php图片缩放类)
Mar 14 PHP
php环境套包 dedeampz 伪静态设置示例
Mar 26 PHP
php查找字符串出现次数的方法
Dec 01 PHP
初识laravel5
Mar 02 PHP
PHP6连接SQLServer2005的三部曲
Apr 15 PHP
php通过两层过滤获取留言内容的方法
Jul 11 PHP
PHP 文件锁与进程锁的使用示例
Aug 07 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
Feb 15 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
laravel安装和配置教程
2014/10/29 PHP
PHP验证码类ValidateCode解析
2017/01/07 PHP
如何用PHP做到页面注册审核
2017/03/02 PHP
redis+php实现微博(二)发布与关注功能详解
2019/09/23 PHP
js中将多个语句写成一个语句的两种方法小结
2007/12/08 Javascript
JavaScript arguments 多参传值函数
2010/10/24 Javascript
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
JS中类或对象的定义说明
2014/03/10 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
javascript闭包(Closure)用法实例简析
2015/11/30 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
利用Node.JS实现邮件发送功能
2016/10/21 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
2017/03/25 Javascript
vue 中directive功能的简单实现
2018/01/05 Javascript
JS实现的JSON数组去重算法示例
2018/04/11 Javascript
微信小程序自定义对话框弹出和隐藏动画
2018/07/19 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
2018/09/29 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
Python内置函数bin() oct()等实现进制转换
2012/12/30 Python
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
2018/04/08 Python
python3基于OpenCV实现证件照背景替换
2018/07/18 Python
对Python random模块打乱数组顺序的实例讲解
2018/11/08 Python
QML使用Python的函数过程解析
2019/09/26 Python
Python超越函数积分运算以及绘图实现代码
2019/11/20 Python
Django配置文件代码说明
2019/12/04 Python
python读取Kafka实例
2019/12/23 Python
简单了解python列表和元组的区别
2020/05/14 Python
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
共产党员公开承诺践诺书
2014/05/28 职场文书
超市七夕促销活动方案
2014/08/28 职场文书
群众路线剖析材料范文
2014/10/09 职场文书
个人作风建设自查报告
2014/10/22 职场文书
求职信范文怎么写
2015/03/19 职场文书
CSS实现五种常用的2D转换
2021/12/06 HTML / CSS