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 相关文章推荐
我的论坛源代码(二)
Oct 09 PHP
dedecms中显示数字验证码的修改方法
Mar 21 PHP
PHP Google的translate API代码
Dec 10 PHP
php的urlencode()URL编码函数浅析
Aug 09 PHP
PHP Switch 语句之学习笔记
Sep 21 PHP
php判断数组元素中是否存在某个字符串的方法
Jun 14 PHP
php设计模式之简单工厂模式详解
Sep 04 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
Oct 30 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
Nov 19 PHP
PHP实现的构造sql语句类实例
Feb 03 PHP
Laravel模型事件的实现原理详解
Mar 14 PHP
实例讲解PHP中使用命名空间
Jan 27 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
用文本文件制作留言板提示(上)
2006/10/09 PHP
PHP整数取余返回负数的相关解决方法
2014/05/15 PHP
php常量详细解析
2015/10/27 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
js设置cookie过期当前时间减去一秒相当于立即过期
2014/09/04 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
JS+CSS实现美化的下拉列表框效果
2015/08/11 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
2017/08/23 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
2018/05/24 jQuery
微信小程序支付功能 php后台对接完整代码分享
2018/06/12 Javascript
node.js连接mysql与基本用法示例
2019/01/05 Javascript
vue中v-show和v-if的异同及v-show用法
2019/06/06 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
Vue仿微信app页面跳转动画效果
2019/08/21 Javascript
微信小程序网络请求实现过程解析
2019/11/06 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
python3 字符串知识点学习笔记
2020/02/08 Python
python实现在列表中查找某个元素的下标示例
2020/11/16 Python
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
会计专业自我鉴定范文
2013/10/06 职场文书
元旦晚会上单位领导演讲稿
2014/01/05 职场文书
培训专员岗位职责
2014/02/26 职场文书
优秀共产党员先进事迹材料
2014/05/06 职场文书
小学教师自我剖析材料
2014/09/29 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
公司董事任命书
2015/09/21 职场文书
优胜劣汰,强者为王——读《鲁滨逊漂流记》有感
2019/08/15 职场文书
Golang全局变量加锁的问题解决
2021/05/08 Golang
有趣的二维码:使用MyQR和qrcode来制作二维码
2021/05/10 Python
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android
Python加密技术之RSA加密解密的实现
2022/04/08 Python