自动时间戳和只读字段只支持模型方式,不支持数据库方式。
模型自动时间戳
开启设置。全局开启:在database.php中,设置为true;
// 自动写入时间戳字段
'auto_timestamp' => true,
如果你只想设置某一个模型开启,需要设置特有字段:
//开启自动时间戳
protected $autoWriteTimestamp = true;
自动时间戳开启后,会自动写入 create_time和 update_time两个字段。默认的类型是int,如果是时间类型,可以更改如下:
'auto_timestamp' => 'datetime', //或
protected $autoWriteTimestamp = 'datetime';
都配置完毕后,当我们新增一条数据时,无须新增create_time会自动写入时间。同理,当我们修改一条数据时,无须修改update_time会自动更新时间。(这里需要数据库有这两个字段create_time、update_time,它才会自动匹配)如果创建和修改时间戳不是默认定义的,也可以自定义。
protected $createTime = 'create_at';
protected $updateTime = 'update_at';
如果业务中只需要 create_time而不需要 update_time,可以关闭它。
protected $updateTime = false;
(单条设置)也可以动态实现不修改update_time,具体如下:
$user->isAutoWriteTimestamp(false)->save();
模型只读字段
举例:我们要在模型端设置username和 email不允许被修改,如下:
protected $readonly = ['username', 'email'];
除了在模型端设置,也可以动态设置只读字段:
$user->readonly(['username', 'email'])->save();
模型类型转换
系统可以通过模型端设置写入或读取时对字段类型进行转换。在模型端设置你想要类型转换的字段属性,属性值为数组。
protected $type = [
'price' => 'integer',
'status' => 'boolean',
'create_time' => 'datetime:Y-m-d'
];
数据库查询读取的字段很多都是字符串类型,我们可以转换成如下类型: integer(整型)、float(浮点型)、boolean(布尔型)、array(数组) object(对象)、serialize(序列化)、json(json)、timestamp(时间戳) datetime(日期)。下面举例一些常见的数据类型:
public function typeC()
{
$user = UserModel::find(19);
var_dump($user->price);
var_dump($user->status);
var_dump($user->create_time);
}
类型转换还是会调用属性里的获取器等操作,编码时要注意这方面的问题。废弃字段,当某个字段在开发项目版本升级中不再使用,可以设置为废弃字段。设置废弃字段后,这个字段就不在查询数据列表里了,写入忽略(存疑)。
//设置废弃字段
protected $disuse = ['status', 'uid'];