当前位置 主页 > 网站技术 > 代码类 >

    Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作

    栏目:代码类 时间:2019-10-26 18:03

    本文实例讲述了Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作。分享给大家供大家参考,具体如下:

    一、获取器

    在model中使用 get+字段名+Attr,可以修改字段的返回值。

    数据库中性别保存为,0未知、1男、2女,查询时返回汉字:

    model:

    //将性别的012修改为未知、男。女返回
    public function getSexAttr($val){
        switch($val){
          case '1' :
            return '男';
          case '2':
            return '女';
          default:
            return '未知';
        }
    }
    //格式化时间戳后返回
    public function getAddtimeAttr($val){
        if($val){
          return date('Y-m-d H:i:s',$val);
        }else{
          return $val;
        }
    }
    
    

    controller:

    $res = TestUser::get(2);
    dump($res->toArray());//性别会被model转化
    dump($res->getData());//返回原始数据
    
    

    二、模型修改器:

    在model中使用 set+字段名+Attr,可以修改字段值,方便添加数据时使用。

    示例,比如密码需要MD5加密:

    model:

    //对密码字段加密之后存储
    //第一个参数是密码
    //第二个参数是添加的数据,可选
    public function setPasswordAttr($val,$data){
        if($val === '') {
          return $val;
        }else{
          return md5($val.$data['email']);
        }
    }
    
    

    三、自动完成:

    model:

    //添加和修改时,都会自动完成的字段
    protected $auto = ['addtime'];
    public function setAddtimeAttr(){
        return time();
    }
    
    

    三、添加数据时,自动完成:

    model:

    protected $insert = ['addtime'];
    public function setAddtimeAttr(){
        return time();
    }
    
    

    四、修改数据时,自动完成:

    model:

    protected $update = ['addtime'];
    public function setAddtimeAttr(){
        return time();
    }
    
    

    五、自动完成时间戳

    在数据库配置文件database.php中,有一项:

    // 自动写入时间戳字段
    'auto_timestamp' => false,
    
    

    如果开启,则会自动完成所有表的时间戳,但是不建议这样,只在需要的地方设置更安全。

    例如对用户表的时间戳自动完成,就在User的model中设置:

    <?php
    namespace app\index\model;
    use think\Model;
    class User extends Model{
      //开启自动完成时间戳功能
      protected $autoWriteTimestamp = true;
      //开启后,
      //添加数据时,默认自动完成的字段是:create_time和update_time。
      //修改数据时,默认自动完成的字段是:update_time。
      //如果数据库不是这两个字段,则会报错
      //如果不想用这两个字段,可以进行如下修改
      protected $createTime = 'addtime';//修改默认的添加时间字段
      protected $updateTime = 'updtime';//修改默认的修改时间字段
       protected $updateTime = false;//当不需要这个字段时设置为false
    }
    
    

    六、软删除

    软删除:当删除条记录时,有时我们需要假删除,只通过修改某个字段状态来标记记录已删除。

    model:

    <?php
    namespace app\index\model;
    use think\Model;
    use traits\model\SoftDelete;//引入软删除的类
    class User extends Model{
      //使用软删除
      //删除时,默认更新的字段是delete_time
      use SoftDelete;
      //如果修改修改默认的字段名字
      protected $deleteTime = 'deltime';
    }