使用https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/translatable.md#advanced-examples上的指令可以拆分表,以便将翻译存储在另一个表中。生成的表结构为:
(例子)
Article ArticleTranslation
+--------------+ +----------------------+
| id | | id |
+--------------+ +----------------------+
| title | | locale |
+--------------+ +----------------------+
| content | | objectclass |
+--------------+ +----------------------+
| online | | foreign_key |
+--------------+ +----------------------+
| field |
+----------------------+
在我看来,使用这种标准方法有两个问题:1. 翻译后的实体存储在翻译表中的多条记录中(每个字段一条)2. 原始记录也应该在翻译后的表中。
Doctrine+ Gedmo translable是否可以像这样存储翻译:
(例子B)
Article ArticleTranslation
+--------------+ +----------------------+
| id | | id |
+--------------+ +----------------------+
| online | | foreign_key |
+--------------+ +----------------------+
| locale |
+----------------------+
| title |
+----------------------+
| content |
+----------------------+
所以未翻译的字段应该在Article表中,翻译后的字段应该在ArticleTranslation表中,每篇翻译后的文章有一条记录。
如何做到这一点?
使用当前的体系结构,它在翻译表中存储每个字段的记录。一般来说,这样做是为了避免在实体中添加或删除可翻译字段时出现同步问题。您的方法的实现将导致有专门用于扩展的额外模式迁移命令,或者在后台有一些神奇的映射。为了避免混淆,唯一计划更新的是原始记录翻译存储作为默认的区域设置回退,而不是在翻译表中有记录。我知道,在高级情况下,这种行为不是你会做的,但这是大多数用户的行为,他们希望它的配置尽可能简单。对于集合转换,你可以使用查询提示。为了保持简单性,这种行为永远不会像SF2那样覆盖99%的用例