我的问题在我的SQL数据库中表示如下:
CREATE TABLE IF NOT EXISTS `t_question` (
`id_question` int(10) NOT NULL AUTO_INCREMENT,
`heading_key` varchar(255) NOT NULL,
PRIMARY KEY (`id_question`)
) ENGINE=InnoDB;
因为我希望我的问题是多语言,所以我将它们的键链接到另一个表(t_lang_data),该表存储了多种用途的字符串(问题,文章等)。
我的t_lang_data具有以下结构:
CREATE TABLE IF NOT EXISTS `t_lang_data` (
`id_lang_data` int(10) NOT NULL AUTO_INCREMENT,
`key` varchar(255) NOT NULL,
`lang_iso` int(10) NOT NULL,
`text` varchar(255) NOT NULL,
PRIMARY KEY (`id_lang_data`)
) ENGINE=InnoDB;
例如,我可以提出这个问题:
id_question = 1; heading_key = heading_quest_1
这些lang_data条目:
id_lang_data = 1; key = heading_quest_1; lang_iso = en_UK; text =“标题为问题1” id_lang_data = 2; key = heading_quest_1; lang_iso = fr;文本 =“Titre de la question 1”
我需要为Doctrine 2映射这些关系,但我不知道该怎么做。 我尝试了many-to-one和one-to-many approch,但它不起作用。
有人有想法吗? 感谢
编辑:我意识到这比我想象的要困难得多。实际上,我的t_lang_data表可以存储许多表的字符串,例如t_questions,t_articles等。但是在映射中,似乎我们只能将两个表映射在一起。
那我怎么办?
答案 0 :(得分:1)
您确实有数据库最常见的翻译问题之一。
如果您希望在不重新发明轮子的情况下获得有效的翻译行为,则应使用此库:https://github.com/l3pp4rd/DoctrineExtensions。
它已经被doctrine2团队推荐并且对我来说非常好。专门针对翻译行为的文档位于:https://github.com/l3pp4rd/DoctrineExtensions。
此外,如果您使用的是symfony2,则专用软件包位于:http:// github.com/stof/DoctrineExtensionsBundle
此外,通过使用专用于引用原始类型和id的翻译字符串存储的表,翻译行为就像您一样。