数据库翻译与学说

Gor*_*Ape 2 symfony doctrine-orm

在思考了很多如何支持i18n之后,我想出了一个可以接受的解决方案来获得一个单独的表. 我安装了可翻译的
问题
按照建议从教条扩展中翻译,但没有按照我想要的方式工作,有经验的用户建议我不要使用它.即使有一个单独的表,它在主表和转换表中都有可翻译的列,并以eav方式存储值.同样,如果默认的语言环境发生了变化(发生在我身上并且可能再次发生),它会让事情变得复杂,因为主表上的默认值似乎没有指定的语言环境.我也有几个可翻译的字段(5~).这将导致5或者甚至更多的左连接以防止后退.

其他解决
方案我认为另一个解决方案是有一个单独的表,只为每个表提供翻译,并设置默认的语言环境和后备可能通过postLoad事件监听器.这样我可以调用obj.getTitle()而无需obj.translations ['en' ] .getTitle(),无需提供语言环境.

问题
这种方法的问题是回退.一个解决方法是在连接期间添加一个"WITH locale in('en','de')例如.这将返回更多的数据,但后退将起作用.另一种方式将使用合并但是学说不可能将它映射到实体.有没有办法有效地实现回退?

Flo*_*ian 5

您可以查看https://github.com/KnpLabs/DoctrineBehaviors#translatable,这是我们在深入研究之后找到的最佳解决方案.

我们目前正在将它用于许多实体,而且效果非常好.您可以使用DQL查询翻译,例如使用DQL进行任何其他授权,加入.

是的,您可以轻松地想象一个使用现有api的后备机制.