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 相关文章推荐
一个查看session内容的函数
Oct 09 PHP
一个简单的PHP&amp;MYSQL留言板源码
Jul 19 PHP
PHP面向对象分析设计的经验原则
Sep 20 PHP
浅谈PHP变量作用域以及地址引用问题
Dec 27 PHP
PHP基于DOMDocument解析和生成xml的方法分析
Jul 17 PHP
使用php自动备份数据库表的实现方法
Jul 28 PHP
基于win2003虚拟机中apache服务器的访问
Aug 01 PHP
PHP共享内存使用与信号控制实例分析
May 09 PHP
php tpl模板引擎定义与使用示例
Aug 09 PHP
在thinkphp5.0路径中实现去除index.php的方式
Oct 16 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
Apr 22 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
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
2011/11/02 PHP
zf框架的Filter过滤器使用示例
2014/03/13 PHP
CodeIgniter输出中文乱码的两种解决办法
2014/06/12 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
PHP使用HTML5 FormData对象提交表单操作示例
2019/07/02 PHP
JavaScript入门教程(1) 什么是JS
2009/01/31 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
Javascript全局变量var与不var的区别深入解析
2013/12/09 Javascript
jQuery实现个性翻牌效果导航菜单的方法
2015/03/09 Javascript
纯js代码实现简单计算器
2015/12/02 Javascript
浅谈JavaScript对象的创建方式
2016/06/13 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
react-navigation之动态修改title的内容
2018/09/26 Javascript
讲解Python中的递归函数
2015/04/27 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
python方向键控制上下左右代码
2018/01/20 Python
python实现多进程代码示例
2018/10/31 Python
python 输出所有大小写字母的方法
2019/01/02 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
python读取Excel表格文件的方法
2019/09/02 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2020/10/14 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
行政部主管岗位职责
2013/12/28 职场文书
师范类求职信
2014/06/21 职场文书
优秀家长自荐材料
2014/08/26 职场文书
2014年管理人员工作总结
2014/12/01 职场文书
幼儿园门卫安全责任书
2015/05/08 职场文书
php实例化对象的实例方法
2021/11/17 PHP
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python