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 str_replace的替换漏洞
Mar 15 PHP
PHP 采集程序 常用函数
Dec 18 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
Dec 12 PHP
PHP目录函数实现创建、读取目录教程实例
Jan 13 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
Nov 10 PHP
PHP设计模式之调解者模式的深入解析
Jun 13 PHP
10个简化PHP开发的工具
Dec 25 PHP
smarty内置函数foreach用法实例
Jan 22 PHP
PHP扩展程序实现守护进程
Apr 16 PHP
学习php设计模式 php实现访问者模式(Visitor)
Dec 07 PHP
php成功操作redis cluster集群的实例教程
Jan 13 PHP
基于PHP实现用户在线状态检测
Nov 10 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
set_include_path在win和linux下的区别
2008/01/10 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
php通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
Js sort排序使用方法
2011/10/17 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
在IE8上JS实现combobox支持拼音检索功能
2016/05/23 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
微信小程序使用navigateTo数据传递的实例
2017/09/26 Javascript
详解vue 数组和对象渲染问题
2018/09/21 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
2019/04/30 Javascript
玩转python爬虫之爬取糗事百科段子
2016/02/17 Python
python之PyMongo使用总结
2017/05/26 Python
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
python版学生管理系统
2018/01/10 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
2019/06/25 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
python可以用哪些数据库
2020/06/22 Python
Opencv python 图片生成视频的方法示例
2020/11/18 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
2021/01/28 Python
会计专业毕业生自我评价
2013/09/25 职场文书
主治医师岗位职责
2013/12/10 职场文书
早读迟到检讨书
2014/01/24 职场文书
公司会议策划方案
2014/05/17 职场文书
人力资源管理求职信
2014/08/07 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
破坏寝室公物检讨书
2014/11/17 职场文书
转正申请报告格式
2015/05/15 职场文书
2016年秋季新学期致辞
2015/07/30 职场文书
2015年教师党员个人总结
2015/11/24 职场文书
投资入股协议书
2016/03/22 职场文书
2019年第四季度财务部门工作计划
2019/11/02 职场文书
MySQL8.0升级的踩坑历险记
2021/11/01 MySQL
mysql通过group by分组取最大时间对应数据的两种有效方法
2022/09/23 MySQL