Laravel 9中Spatie活动日志properties字段不更新问题求助
解决spatie/laravel-activitylog升级Laravel后properties字段为空的问题
升级Laravel版本后,原本正常使用的spatie/laravel-activitylog包出现异常——活动日志表中部分数据行的properties字段为空数组[]。相关模型代码如下:
protected static $logAttributes = [ 'date', 'state', 'old_state', ]; public function getActivitylogOptions(): LogOptions { return LogOptions::defaults(); }
排查与解决步骤
确认字段是否真的发生变更
activitylog默认仅记录$logAttributes中实际发生值变化的字段,如果date、state、old_state在保存前后没有变更,properties为空是正常行为。若需要强制记录所有指定字段(即使无变更),修改日志配置:public function getActivitylogOptions(): LogOptions { return LogOptions::defaults() ->logOnlyDirty(false); // 关闭仅记录变更字段的限制 }检查包版本兼容性
确保spatie/laravel-activitylog版本与新Laravel版本匹配(比如Laravel 10对应activitylog ^4.0版本),执行对应命令更新包:composer require spatie/laravel-activitylog:^4.0验证模型字段访问权限
确认date、state、old_state在模型的$fillable数组中,或者模型设置了$guarded = [],避免activitylog无法读取字段值。排查日志触发方式
批量更新操作(如Model::where(...)->update())不会触发模型的saved/updated事件,activitylog无法自动记录字段变化。需改用模型实例更新触发事件:$model = Model::find($id); $model->update($data);
内容的提问来源于stack exchange,提问作者SvilJuno
相关产品推荐
相关产品推荐

