mirror of
https://gitee.com/zoujingli/ThinkAdmin.git
synced 2026-06-07 04:28:11 +08:00
补充 v8 重构后的架构文档、组件说明和迁移记录,方便后续维护者理解插件边界。 主要内容: - 更新根 README,说明 v8 插件分层、系统模块、交付命令和验证流程。 - 新增组件明细、插件边界、路由分发、软删除和稳定性文档。 - 记录 Storage 合并到 System、旧 View 移除和 Helper 并入 System 的决策。 - 补充文档注释报告和后续重构计划,便于持续演进。
1.9 KiB
1.9 KiB
Soft Delete Standard
当前结论
- ORM 软删除字段统一为
delete_time delete_time是唯一允许继续新增到数据库脚本里的软删除物理字段deleted、deleted_time、deleted_at不再作为物理字段或兼容迁移保留- 不需要软删除的模型,不应再通过
deleteTime = false反向关闭,而应直接使用不带SoftDelete的普通基类
当前实现
1. 模型默认时间字段
- 基类
think\admin\Model默认使用create_time和update_time - 软删除模型统一使用
SoftDeletetrait,并把目标字段固定为delete_time
2. 删除执行路径
- 使用
DeleteHelper删除模型时:- 模型启用了
SoftDelete,则写入delete_time - 模型未启用
SoftDelete,则执行物理删除
- 模型启用了
3. 基类约束
- 软删除模型应继承带
SoftDelete的业务基类 - 非软删除模型应继承普通业务基类
- 不再推荐在同一个基类体系里通过
deleteTime = false做例外开关
禁止事项
以下写法不再允许继续引入:
deleteddeleted_timedeleted_atwhereRaw('deleted=0')field(...deleted...)withoutField('deleted')
这些写法都会把代码重新绑回旧字段语义。
新代码规范
- 新表需要软删除时,只能使用
delete_time datetime null - 新模型需要软删除时,使用统一软删除基类或显式
SoftDelete - 新模型不需要软删除时,直接使用普通基类,不再写
deleteTime = false - 业务状态和软删除必须分开设计,不能混用“作废/取消/失效”字段代替软删除
- 数据库脚本、模型注释、测试断言都必须统一使用
delete_time
清理结果
- 历史兼容软删除迁移已经退化为空迁移占位,不再执行任何字段兼容逻辑
- 软删除与物理删除模型已经按基类分流
- 后续如果再出现旧字段名或
deleteTime = false,应视为回归