ThinkPHP5模型实例详解 / 时间戳功能详解

时间戳功能详解

时间戳功能

1. 作用:系统自动记录用户新增和更新数据的时间。

数据表的写操作是风险操作,详细记录时间是很有必要的。ThinkPHP5支持自动写入时间戳功能,来记录这些操作。


2. 功能开启

  1. 全局开启:打开应用目录下面的数据库配置文件
  • 文件目录:/application/database.php

将48行:auto_timestamp => false; 值由false 修改为 :true 。

 // 是否自动写入时间戳字段
    'auto_timestamp' => true,
  1. 仅本模型开启:在自定义模型类添加如下属性:
  • 我们把数据表创建语句再次查看一下:
#数据库创建语句:
CREATE DATABASE IF NOT EXISTS tp5  DEFAULT CHARSET utf8;

#tp5_staff数据表创建语句:
CREATE TABLE IF NOT EXISTS  tp5_staff (
id INT(4) unsigned NOT NULL AUTO_INCREMENT COMMENT '编号',
name VARCHAR(30) NOT NULL    COMMENT '姓名',
sex TINYINT(2)  unsigned  NOT NULL  DEFAULT 1  COMMENT '性别1男0女',
age TINYINT(3) unsigned NOT NULL DEFAULT 30 COMMENT '年龄',
salary FLOAT(10,2) NOT NULL DEFAULT 2000.00 COMMENT '工资',
dept TINYINT(2)  NOT NULL  DEFAULT 1 COMMENT '部门' ,
hiredate DATE  NOT NULL  DEFAULT '0000-00-00' COMMENT '入职日期',
create_time TIMESTAMP COMMENT '创建时间',
update_time TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (id)
)ENGINE = MyISAM DEFAULT CHARSET = utf8  AUTO_INCREMENT = 1001;
  • 如:Staff.php 模型
<?php
namespace app\index\model;

use think\Model;

class Staff extends Model{

    //如果是true,则默认为int类型
    protected $autoWriteTimestamp = true;
}
  • 我们做一个实例,控制器:Index.php
<?php
namespace app\index\controller;

use app\index\model\Staff;

class Index
{
    public function index()
    {    
        //获取主键为1001的记录信息
        dump(Staff::get(1001)->getData());
    }
}
  • 查结结果如下:
array(9) {
  ["id"] => int(1001)
  ["name"] => string(6) "郭靖"
  ["sex"] => int(1)
  ["age"] => int(20)
  ["salary"] => float(3500)
  ["dept"] => int(1)
  ["hiredate"] => string(10) "2009-09-12"
  ["create_time"] => string(19) "2016-11-30 15:51:04"
  ["update_time"] => string(19) "0000-00-00 00:00:00"
}

因为只是创建操作,没有做过更新,所以更新时间无值


时间格式支持三种类型:

  1. timestamp: 举例 : 2016-10-22 15:39:30
  2. datetime: 举例 :2016-10-29
  3. int: 举例 : 14275648902 这是默认状态

3. 功能关闭:

一、部分关闭:

  • 例如,只关闭自动更新时间写入:
    在模型文件Staff.php 中写入:
<?php
namespace app\index\model;

use think\Model;

class Staff extends Model{

    //关闭自动更新字段
    protected $updatetime = false;
}

二、完全关闭

可写在二处:

  1. 数据库配置文件database.php:
'auto_timestamp' => false,
  1. 模型文件 Staff.php:
<?php
namespace app\index\model;

use think\Model;

class Staff extends Model{

    // 关闭自动写入时间戳 
    protected $autoWriteTimestamp = false;
}

4. 总结:

时间戳功能非常实用,也比较常用,希望课后多做几个练习。