ThinkPHP5模型中的修改器和自动完成

∫`不撒娇的折耳猫 2020-5-26 2299

数据自动完成

数据自动完成指在不需要手动赋值的情况下对字段的值进行处理后写入数据库。

系统支持 auto 、 insert 和 update 三个属性,可以分别在写入、新增和更新的时候进行字段的自动完成机制,auto属性自动完成包含新增和更新操作

我们定义学生模型如下:

<?php
namespace app\index\model;
use think\Model;
 
class Student extends Model
{
    // 设置当前模型对应的完整数据表名称, 必须是 $table ,不能是其它名字
    protected $table = 'student';
 
    //添加记录时,自动将字段status置为1(正常)
    //对createtime也要处理,见setCreatetimeAtrr
    protected $insert = [
        'status' => 1,
        'createtime'
    ];
 
    //添加或修改数据时,自动处理password字段
    protected $auto = ['password'];
 
    //状态的读取器
    public function getStatusAttr($value)
    {
        $status = [0=>'冻结',1=>'正常'];
        return $status[$value];
    }
 
    //创建时间的读取器
    public function getCreatetimeAttr($value)
    {
        return date('Y-m-d',$value);
 
    }
    //时间字段的修改器
    public function setCreatetimeAttr()
    {
        return time();
    }
 
    //修改器,对密码进行md5加密
    public function setPasswordAttr($value)
    {
        return md5($value);
    }
 
}

使用自动完成

public function add()
    {
        //将要添加的数据
        //必填字段:status和createtime并没有赋值,它们可以在模型中自动完成
        $data = [
            'no' => '1835050006',
            'name' => '孙七',
            'sex' => '男',
            'age' => 20,
            'password'=>'123456',  //原始数据采用明文
          ];
 
        //实例化模型对象
        $stu = new Student();
        try {
            $count = $stu->save($data); //返回影响的行数
            return $count;
        } catch (Exception $ex) {
            return '添加错误,' . $ex->getMessage();
        }
 
    }

使用修改数据

public function update()
    {
        $no = '1835050001';
        $data = ['password'=>'666666']; //采用明文,保存到数据库中是md5加密过的
        $stu = new Student();
        try{
            $count = $stu->save($data,['no'=>$no]);
            return $count;
        }catch (Exception $ex){
            return '更新失败,' . $ex->getMessage();
        }
    }

执行完成以上操作时,一定要查看数据库,数据是否正如自己预期的那样


最新回复 (0)
发新帖