如何为Laravel Auditing的old_values和new_values添加额外属性
在Laravel 6.x + Laravel Auditing 12.x中为audits表的new_values/old_values添加额外字段
以下是两种可行的实现方案,按需选择:
方案一:单个可审计模型内修改(适用于单模型需求)
在需要审计的模型(比如Car模型)中,重写getAuditData方法——该方法负责生成审计所需的新旧数据,你可以在这里注入额外字段:
<?php namespace App; use Illuminate\Database\Eloquent\Model; use OwenIt\Auditing\Contracts\Auditable; class Car extends Model implements Auditable { use \OwenIt\Auditing\Auditable; // 模型其他代码... protected function getAuditData(): array { // 先调用父类方法获取原始审计数据 $auditData = parent::getAuditData(); // 给new_values添加额外字段,值可动态获取(比如模型属性、请求参数等) $auditData['new_values']['extra_field'] = 'value'; // 若需给old_values也添加字段,按需取消注释并调整逻辑 // $auditData['old_values']['extra_field'] = $this->getOriginal('extra_field'); return $auditData; } }
方案二:全局事件监听(适用于所有审计模型都需添加的场景)
通过监听Laravel Auditing的Auditing事件,全局修改所有审计记录的新旧数据:
- 创建事件监听器
php artisan make:listener AddExtraFieldToAudit
- 编写监听器逻辑
打开生成的app/Listeners/AddExtraFieldToAudit.php,修改handle方法:
<?php namespace App\Listeners; use OwenIt\Auditing\Events\Auditing; class AddExtraFieldToAudit { public function handle(Auditing $event) { // 给当前审计记录的new_values添加字段 $event->audit->new_values['extra_field'] = 'value'; // 如需修改old_values,按需添加 // $event->audit->old_values['extra_field'] = $event->model->getOriginal('extra_field'); } }
- 注册事件
在app/Providers/EventServiceProvider.php的$listen数组中添加事件与监听器的关联:
protected $listen = [ // 其他事件... \OwenIt\Auditing\Events\Auditing::class => [ \App\Listeners\AddExtraFieldToAudit::class, ], ];
注意事项
extra_field的值可根据业务需求动态生成,比如从模型属性、当前请求参数、登录用户信息等获取,例如$event->model->custom_field或auth()->user()->id。- 确保字段名和值符合业务逻辑,避免破坏原有审计数据结构。
内容的提问来源于stack exchange,提问作者LaszloP
相关产品推荐
相关产品推荐

