Thinkphp5.0框架使用模型Model的获取器、修改器、软

本文实例讲述了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
}


      

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/5266.html