【ThinkPHP6.x框架】(12)模型4(自动时间戳、只读字段、数据类型)

        自动时间戳和只读字段只支持模型方式,不支持数据库方式。

模型自动时间戳

        开启设置。全局开启:在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'];

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值