Laravel 9中astrotomic/laravel-translatable返回无效语言数据问题
排查方案
以下是可能导致该问题的模型配置及代码问题,逐一排查:
确认Banner模型的
$translatable属性
必须明确声明需要翻译的字段,否则主模型不会自动映射对应语言的字段值:// app/Models/Banner.php protected $translatable = ['text', 'description'];检查Banner模型的字段填充规则
确保text、description被包含在$fillable中(或$guarded设为空数组),否则无法通过翻译关联自动赋值到主模型属性:// app/Models/Banner.php protected $fillable = ['text', 'description', ...]; // 补充其他非翻译字段 // 或者 protected $guarded = [];验证BannerTranslation模型的填充规则
翻译模型需要允许locale、翻译字段及外键的批量赋值:// app/Models/BannerTranslation.php protected $fillable = ['banner_id', 'locale', 'text', 'description'];确认当前请求的Locale是否正确
在查询前输出当前语言环境,排除中间件或配置未正确切换语言的情况:dd(app()->getLocale()); // 确认是否输出 'fr'手动触发翻译映射
尝试在查询后手动调用translate()方法强制切换语言,验证是否能正常获取对应翻译:$banners = Banner::translatedIn(app()->getLocale())->get()->each(function ($banner) { $banner->translate(app()->getLocale()); });检查配置文件的 fallback 设定
若config/translatable.php中use_fallback_locale开启,需确保当目标语言翻译存在时不会 fallback 到默认语言。虽然translatedIn()方法应优先返回指定语言的记录,但可临时关闭 fallback 测试:'use_fallback_locale' => false,
内容的提问来源于stack exchange,提问作者Petro Gromovo
相关产品推荐
相关产品推荐

