Tp5中模型Model中字段类型转换与数据完成

一 字段类型转换

支持给字段设置类型自动转换,会在写入和读取的时候自动进行处理,例如:

class User extends Model
{
    protected $type = [
        'status' => 'integer',
        'score' => 'float',
        'birthday' => 'datetime',
        'info' => 'array',
        'friend_list ' => 'json'
    ];
}

下面是一个类型自动转换的示例:


$user = new User;
$user->status = '1';
$user->score = '99.50';
$user->birthday = '2022/5/1';
$user->info = ['a'=>1,'b'=>2];
$user->friend_list = ['name'=>'小明','height'=> 155,'age'=> 12];  //数据库中形式 {"name": "小明", "card": "155", "age": "12"}
$user->save() ; //vardump($user->save());  int 1
var_dump($user->status); // int 1
var_dump($user->score); //float 99.5
var_dump($user->birthday); //string ‘2022-05-01 00:00:00’
var_dump($user->info); // array (size=2) ‘a’ => int 1 ‘b’ => int 2
var_dump($user->friend_list); // array (size=3) ‘name’ => string 小明 ‘height’ => int 155 ‘age’ => int 12

integer:设置为integer(整型)后,该字段写入和输出的时候都会自动转换为整型。
float该字段的值写入和输出的时候自动转换为浮点型。
boolean该字段的值写入和输出的时候自动转换为布尔型。
array如果设置为强制转换为array类型,系统会自动把数组编码为json格式字符串写入数据库,取出来的时候会自动解码。
object该字段的值在写入的时候会自动编码为json字符串,输出的时候会自动转换为stdclass对象。
serialize指定为序列化类型的话,数据会自动序列化写入,并且在读取的时候自动反序列化。
json指定为json类型的话,数据会自动json_encode写入,并且在读取的时候自动json_decode处理。


timestamp指定为时间戳字段类型的话,该字段的值在写入时候会自动使用strtotime生成对应的时间戳,输出的时候会自动转换为dateFormat属性定义的时间字符串格式,默认的格式为Y-m-d H:i:s,如果希望改变其他格式,可以定义如下:

class User extends Model
{
    protected $dateFormat = 'Y/m/d';
    protected $type = [
        'status' => 'integer',
        'score' => 'float',
        'birthday' => 'timestamp',
        'info' => 'array',
        'friend_list ' => 'json'
    ];
}


//或者在类型转换定义的时候使用:

class User extends Model
{
    protected $type = [
        'status' => 'integer',
        'score' => 'float',
        'birthday' => 'timestamp:Y/m/d',
        'info' => 'array',
        'friend_list ' => 'json'
    ];
}

//然后就可以
$user = User::find(1);
echo $user->birthday; // 2022/5/1

datetime和timestamp类似,区别在于写入和读取数据的时候都会自动处理成时间字符串Y-m-d H:i:s的格式。

二 数据完成:

数据自动完成指在不需要手动赋值的情况下对字段的值进行处理后写入数据库。
系统支持auto、insert和update三个属性,可以分别在写入、新增和更新的时候进行字段的自动完成机制,auto属性自动完成包含新增和更新操作,例如我们定义User模型类如下:

class User extends Model
{
    protected $auto = [];
    protected $insert = ['ip','status' => 1];  //在新增数据的时候,会对ip和 status 字段自动完成或者处理。
    protected $update = ['login_ip'];

    //修改器
    protected function setIpAttr()
    {
        return request()->ip();
    }
}

在新增数据的时候,会对ip和 status 字段自动完成或者处理。

$user = new User;
$user->name = 'ThinkPHP';
$user->save();
echo $user->name; // ThinkPHP
echo $user->status; // 1
//在保存操作的时候,会自动完成ip字段的赋值。
$user = User::find(1);
$user->name = 'THINKPHP';
$user->save();
echo $user->name; // THINKPHP
echo $user->ip; // 127.0.0.1

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值