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

Laravel Filament更新操作添加updated_by字段失效,如何正确钩子更新操作?

解决Laravel Filament更新操作自动填充updated_by字段的问题

问题根源

你之前的mutateFormDataBeforeUpdate方法无效,核心原因是放错了文件位置:该方法需要定义在对应资源的编辑页面(比如Pages/EditModule.php)中,而非创建页面(CreateModule.php)。更新操作的逻辑由Edit页面处理,Create页面的代码不会触发更新钩子。

正确实现方式

方式1:在Filament编辑页面中使用钩子

  1. 打开Pages/EditModule.php文件,添加以下代码:
protected function mutateFormDataBeforeUpdate(array $data): array
{
    $data['updated_by'] = auth()->id();
    return $data;
}
  1. 确保你的模型$fillable属性包含updated_by和created_by:
// app/Models/Module.php
protected $fillable = [
    // 你的其他业务字段
    'created_by',
    'updated_by',
];

方式2:使用Laravel模型事件(更通用)

如果希望在所有操作(包括Filament之外的API、控制台CRUD)中自动填充这两个字段,推荐在模型中注册事件钩子,无需在Filament页面中单独处理:

// app/Models/Module.php
protected static function boot()
{
    parent::boot();

    // 创建时自动设置创建人
    static::creating(function ($model) {
        if (auth()->check()) {
            $model->created_by = auth()->id();
        }
    });

    // 更新时自动设置更新人
    static::updating(function ($model) {
        if (auth()->check()) {
            $model->updated_by = auth()->id();
        }
    });
}

这种方式更健壮,无论通过何种渠道修改模型,都会自动维护created_by和updated_by字段。


内容的提问来源于stack exchange,提问作者tolga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:16:17