数据库软删除

  1. 所谓软删除,并不是真的删除数据,而是给数据设置一个标记;
    2. 首先,我们需要在数据表创建一个 delete_time,默认为 NULL;
    3. 其次,使用软删除功能,软删除其实就是 update 操作,创建一个时间标记;
    1. Db::name('user')->where('id', 192)
    2. ->useSoftDelete('delete_time', date('Y-m-d H:i:s'))
    3. ->delete();
    4. return Db::getLastSql();
  2. 此时,这条数据就被软删除了。只不过,手册并没有给出更多的操作;

    模型软删除

  3. 介于数据库软删除没有太多的可操作的方法,官方手册推荐使用模型软操作;
    2. 首先,需要在模型端设置软删除的功能,引入 SoftDelete,它是 trait;
    1. use SoftDelete;
    2. protected $deleteTime = 'delete_time';
  4. delete_time 默认我们设置的是 null,如果你想更改这个默认值,可以设置:
    //protected $defaultSoftDelete = 0;
    4. 默认情况下,开启了软删除功能的查询,模型会自动屏蔽被软删除的数据;
    1. $user = UserModel::select();
    2. return json($user);
  5. 在开启软删除功能的前提下,使用 withTrashed()方法取消屏蔽软删除的数据;
    1. $user = UserModel::withTrashed()->select();
    2. return json($user);
  6. 如果只想查询被软删除的数据,使用 onlyTrashed()方法即可;
    1. $user = UserModel::onlyTrashed()->select();
    2. return json($user);
  7. 如果想让某一条被软删除的数据恢复到正常数据,可以使用 restore()方法;
    1. $user = UserModel::onlyTrashed()->find();
    2. $user->restore();
  8. 如果想让一条软删除的数据真正删除,在恢复正常后,使用 delete(true);
    1. $user = UserModel::onlyTrashed()->get(193);
    2. $user->restore();
    3. $user->delete(true);