将具有不同语言的2张相同的帖子表存储到数据库中

我正在建立一个多语言网站。 在这种情况下,只有2种语言,它是使用Laravel的印度尼西亚语和英语。 我有帖子表,它会存储每个帖子的ID,而post_translations表用于存储本地,标题和帖子的描述。 将数据存储到数据库时遇到了问题。 我不知道如何存储帖子,除了我已经添加了2个印尼文和英文相同的文章。

这是结果(错误)

帖子表

id 
1
2

post_translations表

id  post_id  locale   title
1     1      en       fisrt post
2     2      id       post yang pertama

达到最终结果

帖子表

id 
1

post_translations表

id  post_id  locale   title
1     1      en       fisrt post
2     1      id       post yang pertama

PostController中

  public function store(Request $request) {
    $this->validate($request, [
        'title' => 'required',
        'slug' => 'required',
        'content' => 'required'
    ]);

    $post = new Post;

    $post->title = $request->title;
    $post->slug = $request->slug;
    $post->content = $request->content;

    $post->save();
    return redirect()->route('post.index');
}

好的,现在我们走了(请注意,这不是唯一的方法):

  • 安装spatie / laravel-translatable with

    作曲家需要spatie / laravel翻译

  • **注意:对于原生spatie / laravel可翻译版本2 **

  • 用这个结构创建一个表格:

    CREATE TABLE articlesid int(10)UNSIGNED NOT NULL, title text COLLATE utf8_unicode_ci, slug text COLLATE utf8_unicode_ci, content text COLLATE utf8_unicode_ci, created_at timestamp NULL DEFAULT NULL, updated_at timestamp NULL DEFAULT NULL)ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci ;

  • 注意:beter使用迁移。 我刚刚导出了一个我之前测试过的表

  • 像这样以json格式将数据插入到数据库中:
  •     INSERT INTO `pages` (`id`, `title`, `slug`, `content`, `created_at`, `updated_at`) VALUES
            (1, '{"ro":"Acasu0103","en":"Home"}', NULL, '{"ro":"<p><strong>Test title</strong></p>rnrn<p>Test content romanian</p>rn","en":"<p><strong>test title english</strong></p>rnrn<p>test content english.</p>rn"}', '2017-04-03 11:45:56', '2017-04-03 12:15:16');

    我认为你应该改变你的桌子结构:

    帖子 :id,slug。

    post_translations :id,post_id,语言环境,标题,内容

    还要添加关系到你的Post模型:

    public function translations()
    {
        return $this->hasMany(PostTranslation::class, 'post_id');
    }
    

    并更新你的控制器:

    $post = new Post;
    
    $post->slug = $request->slug;
    $post->save();
    
    $post->translations()->create([
        'locale' => 'en', //or grab it from $request
        'title' => $request->title,
        'content' => $request->content
    ])
    

    它会创建您的文章并添加翻译

    链接地址: http://www.djcxy.com/p/37511.html

    上一篇: Storing 2 same id of post table with different language into database

    下一篇: Laravel Multi language Site Database Structure