thinkphp5.1插件实现

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

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

一、获取器

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

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

model:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • //将性别的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:

  • ?
  • 1
  • 2
  • 3
  • $res = TestUser::get(2);
  • dump($res->toArray());//性别会被model转化
  • dump($res->getData());//返回原始数据
  • 二、模型修改器:

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

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

    model:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • //对密码字段加密之后存储
  • //第一个参数是密码
  • //第二个参数是添加的数据,可选
  • public function setPasswordAttr($val,$data){
  •     if($val === '') {
  •       return $val;
  •     }else{
  •       return md5($val.$data['email']);
  •     }
  • }
  • 三、自动完成:

    model:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • //添加和修改时,都会自动完成的字段
  • protected $auto = ['addtime'];
  • public function setAddtimeAttr(){
  •     return time();
  • }
  • 三、添加数据时,自动完成:

    model:

  • ?
  • 1
  • 2
  • 3
  • 4
  • protected $insert = ['addtime'];
  • public function setAddtimeAttr(){
  •     return time();
  • }
  • 四、修改数据时,自动完成:

    model:

  • ?
  • 1
  • 2
  • 3
  • 4
  • protected $update = ['addtime'];
  • public function setAddtimeAttr(){
  •     return time();
  • }
  • 五、自动完成时间戳

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

  • ?
  • 1
  • 2
  • // 自动写入时间戳字段
  • 'auto_timestamp' => false,
  • 如果开启,则会自动完成所有表的时间戳,但是不建议这样,只在需要的地方设置更安全。

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

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • <?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:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • <?php
  • namespace app\index\model;
  • use think\Model;
  • use traits\model\SoftDelete;//引入软删除的类
  • class User extends Model{
  •   //使用软删除
  •   //删除时,默认更新的字段是delete_time
  •   use SoftDelete;
  •   //如果修改修改默认的字段名字
  •   protected $deleteTime = 'deltime';
  • }
  • 控制器:

  • ?
  • 1
  • 2
  • 3
  • $res = User::destroy(1);//软删除
  • //返回影响的行数
  • dump($res);
  • 执行删除后,就会更新delete_time字段,如果update_time字段也开启了自动完成,也会更新update_time字段。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • //获取所有数据,会过滤掉delete_time不为null的记录(即软删除的记录不会显示)
  • //注意,delete_time字段默认值要设置为null,不能设置为0,否则0页会被视为软删除过的数据
  • $res = $model->select();
  • //如果需要获取包含软删除的数据,使用withTrashed(true)。
  • $res = User::withTrashed(true)->select();
  • //如果需要获取软删除过的数据
  • $res = User::onlyTrashed()->select();
  • //删除id是15的记录,如果开启软删除,会进行假删除
  • $res = User::destroy(15);
  • //如果开启了软删除,需要真正地删除数据,不做软删除
  • //destory()第二个参数传递true
  • $res = User::destroy(15,true);
  • //delete()参数传递true
  • $userData = User::get(15);
  • $userData->delete(true);
  • 希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

    原文链接:https://www.cnblogs.com/gyfluck/p/9431142.html