1. 什么是逻辑删除
逻辑删除是指在数据库中,不是直接删除数据,而是通过标记数据来表示其已被删除的状态。这样的做法可以保留数据的完整性和连续性,并且可以方便地恢复已被删除的数据。
2. thinkphp中的逻辑删除
thinkphp是一款开源的PHP框架,它通过使用软删除功能来实现逻辑删除。软删除会在数据表中添加一个表示删除状态的字段,通常是一个布尔类型的字段。
2.1 创建一个字段
首先,在thinkphp的模型文件中,需要创建一个表示删除状态的字段。可以在数据库迁移文件中添加该字段,例如,在用户表中添加一个名为is_deleted
的字段:
use think\migration\db\Column;
public function up()
{
$table = $this->table('users');
$table->addColumn('is_deleted', 'boolean', ['default' => false])
->update();
}
这样,is_deleted
字段就会被添加到users
表中。
2.2 修改模型类
接下来,需要在模型类中添加逻辑删除的相关代码。在用户模型类中,可以添加一个名为delete
的方法,用于逻辑删除用户:
use think\Model;
class User extends Model
{
public function delete()
{
$this->is_deleted = true;
return $this->save();
}
}
在delete
方法中,将is_deleted
字段的值设置为true
,表示用户已被删除。然后调用save
方法保存修改后的模型。
2.3 查询逻辑删除的数据
默认情况下,查询数据时会自动过滤掉被标记为删除的数据。如果需要查询已被逻辑删除的数据,可以使用withTrashed
方法:
$users = User::withTrashed()->select();
使用withTrashed
方法后,查询结果中会包含被逻辑删除的用户。
2.4 恢复逻辑删除的数据
要恢复逻辑删除的数据,可以使用restore
方法:
$user = User::find($id);
$user->restore();
以上代码中,首先通过find
方法找到被删除的用户,然后调用restore
方法将用户恢复。
2.5 彻底删除逻辑删除的数据
如果需要彻底删除逻辑删除的数据,可以使用forceDelete
方法:
$user = User::find($id);
$user->forceDelete();
调用forceDelete
方法后,被删除的用户将不再在数据库中保留。
3. 总结
通过使用thinkphp提供的软删除功能,我们可以实现逻辑删除的功能。只需在数据库中添加一个表示删除状态的字段,并在模型类中添加逻辑删除的相关代码即可。