PHP 数据软删除

php 数据库数据软删除

模型的改动

1,需要导入 use traits\model\SoftDelete;
2,在内部组合使用 use SoftDelete;
3,指定数据库软删除的标记字段 protected $deleteTime = 'delete_time';
4,(可选参数)指定标记字段的默认值 5.1 版本以上才有效 protected $defaultSoftDelete = 0;

namespace app\index\model;

use think\Model;
use traits\model\SoftDelete;

class User extends Model
{
    use SoftDelete;
    //定义数据表中软删除标记字段
    protected $deleteTime = 'delete_time';
    //5.1以上版本才有defaultSoftDelete属性,设置软删除字段的默认值,5.0的默认值为NULL
    protected $defaultSoftDelete = 0;
}

逻辑内部使用

// 软删除   根据主键
User::destroy(1);
// 真实删除
User::destroy(1,true);
$user = User::get(1);     ## 此处需要主要,如果是先使用模型查出数据再删除的话是软删除,若直接使用 delete 方法,则是真实删除,因为 thinkphp 由模型直接调用 delete 方法走的是数据库的 delete 方法
// 软删除
$user->delete();
// 真实删除
$user->delete(true);

默认情况下查询的数据不包含软删除数据,如果需要包含软删除的数据,可以使用下面的方式查询:

User::withTrashed()->find();
User::withTrashed()->select();

如果仅仅需要查询软删除的数据,可以使用:

User::onlyTrashed()->find();
User::onlyTrashed()->select();

注:软删除仅对模型的删除方法有效,如果直接使用数据库的删除方法则无效,例如下面的方式无效(将不会执行任何操作)。

User::where('id',1)->delete();    ### 因为此方法是直接调用的 数据库的 delete 方法,所以无法达到软删除的效果
根据 where 条件进行软删除
1, 通过 destroy 方式的闭包函数实现
$data = NewAModel::destroy(function($query) use ($key){
                $query->where('key',$key);
            });

通过上面方式可以对 NewAModel 模型数据进行 where 条件软删除

2,通过先获取,再删除实现软删除
$NewAModel = NewAModel::where('key',$key);
$NewAModel->delete();

3, 通过 destroy 的数组方式实现 where 条件的软删除
$data = NewAModel::destroy(['key'=>$key]);

建议

自己封装软删除方法,不要使用这个
原因:
无论是否成功删除数据,都是返回布尔值 true
无法判断是否成功删除数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值