You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 23:32:35