Laravel Filament更新操作添加updated_by字段失效,如何正确钩子更新操作?
解决Laravel Filament更新操作自动填充updated_by字段的问题
问题根源
你之前的mutateFormDataBeforeUpdate方法无效,核心原因是放错了文件位置:该方法需要定义在对应资源的编辑页面(比如Pages/EditModule.php)中,而非创建页面(CreateModule.php)。更新操作的逻辑由Edit页面处理,Create页面的代码不会触发更新钩子。
正确实现方式
方式1:在Filament编辑页面中使用钩子
- 打开
Pages/EditModule.php文件,添加以下代码:
protected function mutateFormDataBeforeUpdate(array $data): array { $data['updated_by'] = auth()->id(); return $data; }
- 确保你的模型
$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
相关产品推荐
相关产品推荐

