模型类型转换

  1. 系统可以通过模型端设置写入或读取时对字段类型进行转换;
    2. 我们这里,通过读取的方式来演示部分效果;
    3. 在模型端设置你想要类型转换的字段属性,属性值为数组;
    1. protected $type = [
    2. 'price' => 'integer',
    3. 'status' => 'boolean',
    4. 'create_time' => 'datetime:Y-m-d'
    5. ];
  2. 数据库查询读取的字段很多都是字符串类型,我们可以转换成如下类型:
    integer(整型)、float(浮点型)、boolean(布尔型)、array(数组)
    object(对象)、serialize(序列化)、json(json)、timestamp(时间戳)
    datetime(日期)
    5. 由于数据库没有那么多类型演示,常用度不显著,我们提供几个方便演示的;
    1. public function typeConversion()
    2. {
    3. $user = UserModel::get(21);
    4. var_dump($user->price);
    5. var_dump($user->status);
    6. var_dump($user->create_time);
    7. }
  3. 类型转换还是会调用属性里的获取器等操作,编码时要注意这方面的问题;

    模型数据完成

  4. 模型中数据完成通过 auto、insert 和 update 三种形式完成;
    2. auto 表示新增和修改操作,insert 只表示新增,update 只表示修改;
    1. protected $auto = ['email'];
    2. protected $insert = ['uid'=>1];
    3. protected $update = [];
  5. 先理解 insert,当我们新增一条数据时会触发新增数据完成;
    4. 此时,并不需要自己去新增 uid,它会自动给 uid 赋值为 1;
    1. $user = new UserModel();
    2. $user->username = '李白';
    3. $user->password = '123';
    4. $user->gender = '男';
    5. $user->email = 'libai@163.com';
    6. $user->price = 100;
    7. $user->details = '123';
    8. $user->save();
  6. auto 表示新增和修改均要自动完成,而不给默认值的字段需要修改器提供;
    1. public function setEmailAttr($value)
    2. {
    3. return strtoupper($value);
    4. }
  7. 新增时,邮箱字符串会被修改器自动完成大写,那数据完成的意义何在?
    7. 修改时,如果你不去修改邮箱,在数据自动完成强制完成,会自动完成大写;
    8. 也就是说,邮箱的大写,设置 update 更加合适,因为新增必填必然触发修改器;
    9. 对于 update 自动完成,和 auto、insert 雷同,自行演示;