Laravel Auditing出现重复审计条目,寻求解决方案
已按照Laravel Auditing官方文档完成安装,修改模型代码如下:
class MyModel extends Model implements Auditable { use CamelCaseAttributes; use AuditingAuditable; // ... }
目前遇到的问题是:audits表中,每个操作(创建/更新等)都会生成两条完全相同的审计条目。通过DB::enableQueryLog和DB::getQueryLog查看查询日志,发现仅执行了1条更新语句,但向audits表插入了两条完全相同的数据。
环境信息:
php => 8.0 laravel => 8.0 laravel-audits => 13.6
以下是几种常见的排查方向和解决办法:
检查模型保存操作是否被重复触发
确认业务代码中是否对同一模型实例调用了多次save()/update()方法,或者存在观察者、事件监听器重复触发模型保存的情况。可以在模型的saving或saved事件中添加日志,记录触发次数,定位重复来源。排查服务提供者/中间件重复注册
打开config/app.php,检查OwenIt\Auditing\AuditingServiceProvider::class是否被重复添加到服务提供者列表;同时确认路由中是否重复应用了Auditing相关的中间件。检查Trait冲突或重复引用
确认模型是否通过其他Trait间接引入了AuditingAuditable,或者CamelCaseAttributes与AuditingAuditable存在兼容性冲突。可以暂时移除CamelCaseAttributesTrait进行测试,看是否还会生成重复条目。临时禁用重复审计(Workaround)
如果已定位到某段代码导致重复触发,可以使用withoutAuditing方法临时禁用审计:MyModel::withoutAuditing(function () use ($model) { $model->update([/* 你的更新字段 */]); });注意:这只是临时解决办法,建议优先找到根本原因修复。
升级Laravel Auditing版本
版本13.6可能存在已知的重复审计Bug,建议升级到13.x分支的最新稳定版本,同时查看官方仓库的Issues,确认是否有类似问题已被修复。
内容的提问来源于stack exchange,提问作者Ki_Netic

