在我看来,在您的情况下,最好的选择是创建一个单独的表来存储每条记录的翻译。
例如,像博客文章这样的条目将包含一些在所有网站语言中都通用的字段,但标题、内容和 slug 等内容将是特定于区域设置的。当用户请求信息时,所有通用信息将从“posts”表中检索,而语言环境特定的翻译将从“posts_translations”表中检索。
这样您就不必为每个翻译手动添加列。虽然从技术上讲这可以正常工作,但如果您不得不添加另一种语言,您会遇到问题。如果翻译存储在单独的表中,那不再是问题。
以下是使用 Eloquent ORM 时的示例:
public function getPosts()
{
$language = App::getLocale();
$posts = Post::with([
'translation' => function ($query) use ($language) {
$query->where('language', '=', $language);
}
])->get();
return $posts;
}
或者,使用 Laravel 的查询构建器的相同方法:
public function getPosts()
{
$language = App::getLocale();
$posts = DB::table('posts')
->leftJoin('posts_translations', 'posts.id', '=', 'posts_translations.post_id')
->where('posts_translations.language', '=', $language)
->get();
return $posts;
}