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

Laravel Filament v3使用spatie翻译插件时user_id翻译错误求助

解决Laravel Filament v3 + Spatie Translatable插件的user_id翻译错误问题

问题原因

出现该错误是因为系统尝试将user_id作为翻译字段处理,但它并未加入Post模型的$translatable数组。大概率是以下两种情况:

  1. 表单中user_id字段被错误放置在TranslatableSection/TranslatableForm组件内部,导致Filament自动将其包装为多语言数组格式
  2. 在mutateFormDataBeforeCreate中设置user_id后,插件错误地将其纳入翻译处理流程

解决方案

方案1:使用模型事件设置user_id(推荐)

绕过Filament表单数据处理流程,直接在模型创建前通过事件设置user_id,避免被多语言插件干扰:

// app/Models/Post.php
protected static function booted(): void
{
    static::creating(function (Post $post) {
        $post->user_id = auth()->id();
    });
}

然后移除CreatePost类中mutateFormDataBeforeCreate方法里的$data['user_id'] = auth()->id();代码。

方案2:调整表单结构,确保user_id不被翻译组件处理

如果需要在Filament表单中处理user_id,确保它不在翻译相关组件内:

// app/Filament/Resources/PostResource/Pages/CreatePost.php
public function form(Form $form): Form
{
    return $form
        ->schema([
            // 普通字段放在TranslatableSection外面
            Forms\Components\Hidden::make('user_id')
                ->default(fn () => auth()->id()),
            
            Forms\Components\TranslatableSection::make('Translatable Content')
                ->schema([
                    // 这里放需要翻译的字段:title, slug等
                    Forms\Components\TextInput::make('title'),
                    Forms\Components\TextInput::make('slug'),
                    // ...其他翻译字段
                ]),
        ]);
}

这种方式直接通过default设置user_id,无需在mutate方法中额外处理。

方案3:修正mutate方法的数据处理

如果必须保留mutateFormDataBeforeCreate方法,确保user_id以普通 scalar 值传递,避免被插件误处理:

// app/Filament/Resources/PostResource/Pages/CreatePost.php
protected function mutateFormDataBeforeCreate(array $data): array
{
    // 先提取可能被错误包装的user_id值(如果存在)
    if (isset($data['user_id']) && is_array($data['user_id'])) {
        // 取任意语言的value,因为所有语言值都是同一个user_id
        $data['user_id'] = reset($data['user_id']);
    } else {
        $data['user_id'] = auth()->id();
    }
    
    return $data;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:42:15