ThinkPHP5模型实例详解
/ 时间戳功能详解
时间戳功能详解
时间戳功能
1. 作用:系统自动记录用户新增和更新数据的时间。
数据表的写操作是风险操作,详细记录时间是很有必要的。ThinkPHP5支持自动写入时间戳功能,来记录这些操作。
2. 功能开启
- 全局开启:打开应用目录下面的数据库配置文件
- 文件目录:/application/database.php
将48行:
auto_timestamp => false;
值由false 修改为 :true 。
// 是否自动写入时间戳字段
'auto_timestamp' => true,
- 仅本模型开启:在自定义模型类添加如下属性:
- 我们把数据表创建语句再次查看一下:
#数据库创建语句:
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"
}
因为只是创建操作,没有做过更新,所以更新时间无值
时间格式支持三种类型:
- timestamp: 举例 : 2016-10-22 15:39:30
- datetime: 举例 :2016-10-29
- int: 举例 : 14275648902 这是默认状态
3. 功能关闭:
一、部分关闭:
- 例如,只关闭自动更新时间写入:
在模型文件Staff.php 中写入:
<?php
namespace app\index\model;
use think\Model;
class Staff extends Model{
//关闭自动更新字段
protected $updatetime = false;
}
二、完全关闭
可写在二处:
- 数据库配置文件database.php:
'auto_timestamp' => false,
- 模型文件 Staff.php:
<?php
namespace app\index\model;
use think\Model;
class Staff extends Model{
// 关闭自动写入时间戳
protected $autoWriteTimestamp = false;
}
4. 总结:
时间戳功能非常实用,也比较常用,希望课后多做几个练习。