如何使用Doctrine 2 + Gedmo Translatable将翻译存储在不同的表中

时间:2011-10-03 10:24:28

标签: php doctrine translation

使用https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/translatable.md#advanced-examples上的说明可以拆分表格,以便将翻译存储在另一个表格中。  生成的表结构是:

(例A)

 Article             ArticleTranslation
+--------------+    +----------------------+
| id           |    | id                   |
+--------------+    +----------------------+
| title        |    | locale               |
+--------------+    +----------------------+
| content      |    | objectclass          |
+--------------+    +----------------------+
| online       |    | foreign_key          |
+--------------+    +----------------------+
                    | field                |
                    +----------------------+

在我看来,使用这种标准方法存在两个问题: 1.翻译实体存储在翻译表中的多个记录中(每个字段一个) 2.原始记录也应该在翻译表中。

Doctrine + Gedmo Translatable是否可以存储这样的翻译:

(例B)

 Article             ArticleTranslation
+--------------+    +----------------------+
| id           |    | id                   |
+--------------+    +----------------------+
| online       |    | foreign_key          |
+--------------+    +----------------------+
                    | locale               |
                    +----------------------+
                    | title                |
                    +----------------------+
                    | content              |
                    +----------------------+

因此,未翻译的字段应位于Article表中,ArticleTranslation表中的已翻译字段,每个翻译文章一个记录。

如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

使用当前架构,它在转换表中存储每个字段的记录。通常,它是以这种方式完成的,以便在您从实体添加或删除可翻译字段时避免同步问题。 实现您的方法将导致具有专门用于扩展的附加模式迁移命令或在后台具有一些魔术映射。为了避免混淆,计划更新的唯一内容是原始记录翻译存储作为默认语言环境回退,而没有在转换表中记录。 我知道在高级情况下,这种行为并不是你本来应该做的,但对于大多数用户来说,这是一种行为,希望它尽可能简单地配置。 关于集合翻译,您可以使用query hint此行为永远不会覆盖99%的用例,例如SF2,以保持简单