用学说2映射

时间:2011-05-02 14:11:32

标签: php doctrine-orm mapping

我的问题在我的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-oneone-to-many approch,但它不起作用。

有人有想法吗? 感谢

编辑:我意识到这比我想象的要困难得多。实际上,我的t_lang_data表可以存储许多表的字符串,例如t_questions,t_articles等。但是在映射中,似乎我们只能将两个表映射在一起。

那我怎么办?

1 个答案:

答案 0 :(得分:1)

您确实有数据库最常见的翻译问题之一。

如果您希望在不重新发明轮子的情况下获得有效的翻译行为,则应使用此库:https://github.com/l3pp4rd/DoctrineExtensions

它已经被doctrine2团队推荐并且对我来说非常好。专门针对翻译行为的文档位于:https://github.com/l3pp4rd/DoctrineExtensions

此外,如果您使用的是symfony2,则专用软件包位于:http:// github.com/stof/DoctrineExtensionsBundle

此外,通过使用专用于引用原始类型和id的翻译字符串存储的表,翻译行为就像您一样。