ThinkPHP更新后,如何实现修改日志记录功能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计858个文字,预计阅读时间需要4分钟。
ThinkPHP本身不支持自动记录模型字段修改日志,需要手动介入。最可靠的方式是使用模型事件(也称为钩子函数)。以下是一个示例:
为什么不用 AppInit / HttpEnd 这类全局事件
这类事件在请求生命周期中触发,无法精准捕获「哪条数据被改了」「改了哪些字段」。比如用户编辑个人资料,你只关心 User 模型的 update 行为,而不是整个请求结束时干点什么。
- 全局事件没有模型上下文,拿不到原始数据和更新后数据对比
- 无法区分是批量更新还是单条更新,容易误记日志
- 若控制器没走模型(比如直接 DB::table()->update()),事件根本不会触发
模型事件怎么注册才生效
模型事件必须在模型类里定义,并通过 protected static $event 或 init() 注册,否则不触发。
本文共计858个文字,预计阅读时间需要4分钟。
ThinkPHP本身不支持自动记录模型字段修改日志,需要手动介入。最可靠的方式是使用模型事件(也称为钩子函数)。以下是一个示例:
为什么不用 AppInit / HttpEnd 这类全局事件
这类事件在请求生命周期中触发,无法精准捕获「哪条数据被改了」「改了哪些字段」。比如用户编辑个人资料,你只关心 User 模型的 update 行为,而不是整个请求结束时干点什么。
- 全局事件没有模型上下文,拿不到原始数据和更新后数据对比
- 无法区分是批量更新还是单条更新,容易误记日志
- 若控制器没走模型(比如直接 DB::table()->update()),事件根本不会触发
模型事件怎么注册才生效
模型事件必须在模型类里定义,并通过 protected static $event 或 init() 注册,否则不触发。

