在 ThinkPHP 框架中,软删除是一种常用的数据删除方式,它并不是真正地从数据库中删除记录,而是通过标记记录的状态来实现“删除”的效果。通常,软删除的实现依赖于在数据表中添加一个表示删除状态的字段,例如 delete_time
或 is_deleted
。
默认值设置
-
使用
delete_time
字段:- 这种方式通常用于记录删除的时间戳。当记录被软删除时,将当前时间戳写入
delete_time
字段。 - 默认值应为
NULL
或0
,表示记录未被删除。 - 在进行软删除操作时,框架或代码会将
delete_time
设置为当前时间。
- 这种方式通常用于记录删除的时间戳。当记录被软删除时,将当前时间戳写入
-
使用
is_deleted
字段:- 这种方式使用一个布尔值或整数(如
0
和1
)来表示记录的删除状态。 - 默认值通常为
0
,表示记录未被删除。 - 当记录被软删除时,将
is_deleted
设置为1
。
- 这种方式使用一个布尔值或整数(如
实现软删除
在 ThinkPHP 中,软删除通常通过模型事件或自定义方法来实现。以下是一个简单的示例,展示如何在模型中实现软删除:
namespace app\model;
use think\Model;
class YourModel extends Model
{
// 假设使用 is_deleted 字段进行软删除
protected $autoWriteTimestamp = true; // 如果使用时间戳字段,可以开启自动写入
// 软删除方法
public static function softDelete($id)
{
$data = [
'is_deleted' => 1, // 或者使用 'delete_time' => time()
];
return self::update($data, ['id' => $id]);
}
// 查询未删除的记录
public static function getActiveRecords()
{
return self::where('is_deleted', 0)->select();
}
}
注意事项
- 数据表设计:确保在数据表中添加了适当的字段(如
delete_time
或is_deleted
)。 - 查询过滤:在查询数据时,应始终过滤掉已软删除的记录,以避免显示不应显示的数据。
- 框架支持:某些版本的 ThinkPHP 可能提供了内置的软删除支持,建议查阅官方文档以获取更多信息。
通过合理设计和实现软删除功能,可以有效地管理数据删除操作,同时保留数据的历史记录。