【PHP、Thinkphp】ThinkPHP5.0的软删除功能

本文介绍了如何在ThinkPHP项目中实现软删除功能,包括使用SoftDeleteTrait、定义模型、删除操作的区别、查询未删除和已删除记录的方法,以及如何恢复被删除的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在实际项目中,对数据频繁使用删除操作会导致性能问题,软删除的作用就是把数据加上删除标记,而不是真正的删除,同时也便于需要的时候进行数据的恢复。

要使用软删除功能,需要引入SoftDelete trait

我新建了一个表my_admin,下面是对应的model

<?php

    namespace app\common\model;

    use think\Model;

    use traits\model\SoftDelete;

    class Admin extends Model {

        protected $table = 'my_admin';

        protected $deleteTime = 'delete_time';

        use  SoftDelete;

    }

$deleteTime 表示你的表中用来标记的删除时间的字段名, 注意数据类型为int,而不是手册中的    时间戳类型( 我试了一下,如果设置成timestamp,写入的时间是0000-00-00 00:00:00)

1、删除

<?php

    namespace app\admin\controller;

    use app\common\model\Admin;

    class Index extends Base {

        public function index() {

            Admin::destroy(1);

            Admin::destroy([1,2,3]);

            Admin::destroy(['status'=>'0']);

        }

    }

这种删除方法其实就是将delete_time字段写入当前的删除时间,此记录并没有真正删除

但是在定义了软删除之后,以下的删除方式还是将记录真正删除了

<?php

    namespace app\admin\controller;

    use app\common\model\Admin;

    class Index extends Base {

        public function index() {

            $admin = new Admin();

            $admin->where('name', 'in', ['asd','sss',])->delete();

        }

    }

2、查询

<?php

    namespace app\admin\controller;

    use app\common\model\Admin;

    class Index extends Base {

        public function index() {

            //查询没有被软删除的记录

            Admin::select();

            //只查询被软删除的记录

            Admin::onlyTrashed()->select();

            //包含已经被软删除的记录

            Admin::withTrashed()->select();

        }

    }

3、恢复被软删除的记录

retore中的参数是where数组

<?php

    namespace app\admin\controller;

    use app\common\model\Admin;

    class Index extends Base {

        public function index() {

            $admin = new Admin();

            $admin->restore(['id' => '14']);

        }

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值