Php 与原则2的映射

Php 与原则2的映射,php,doctrine-orm,mapping,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),该表存储字符串以供多种用

我的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_数据具有以下结构:

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_问题=1;标题(u键)= 标题(任务)1

这些lang_数据项:

id_lang_data=1;钥匙= 标题1;lang_iso=英国; text=“问题1的标题” id_lang_data=2;钥匙= 标题1;lang_iso=fr;文本 =“问题1的标题”

我需要为教义2绘制这些关系图,但我不知道该怎么做。 我尝试了一种新的方法,但不起作用

有人有主意吗? 谢谢

编辑:我意识到这比我想象的还要困难。事实上,我的t_lang_数据表可以存储许多表的字符串,如t_问题、t_文章等。但是在映射中,我们似乎只能将两个表映射到一起


那我该怎么办呢?

数据库确实存在一个最常见的翻译问题

如果希望在不重新发明轮子的情况下实现高效的转换行为,则应使用以下库:

这是Doctorine2团队推荐的,对我来说效果非常好。此处提供了专门用于翻译行为的文档:

另外,如果您使用的是symfony2,那么专用捆绑包就在这里:http://github.com/stof/DoctrineExtensionsBundle


此外,转换行为的工作原理与您的类似,它使用一个专用于转换字符串存储的表来引用原始类型和id。

您确实遇到了数据库中最常见的转换问题之一

如果希望在不重新发明轮子的情况下实现高效的转换行为,则应使用以下库:

这是Doctorine2团队推荐的,对我来说效果非常好。此处提供了专门用于翻译行为的文档:

另外,如果您使用的是symfony2,那么专用捆绑包就在这里:http://github.com/stof/DoctrineExtensionsBundle


此外,转换行为的工作原理与您的类似,它使用一个专用于转换字符串存储的表,该表引用原始类型和id。

Thank;)但显然我不能一次添加多个字符串。在用另一种语言添加字符串之前,我们必须刷新。例如,我不能这样做:$a=newarticle()$a->设置标题(“我的英语标题”)$a->changeLocale(“fr”)$a->标题(“法语的自由”)$a-冲洗();好吧,我只能建议你对自己的行为进行编码。为此,你可以从理论的延伸中汲取一些想法。因此,您需要一个包含类、字段和id列的表,并构建一个自定义请求来检索所有已翻译的字段。谢谢;)但显然我不能一次添加多个字符串。在用另一种语言添加字符串之前,我们必须刷新。例如,我不能这样做:$a=newarticle()$a->设置标题(“我的英语标题”)$a->changeLocale(“fr”)$a->标题(“法语的自由”)$a-冲洗();好吧,我只能建议你对自己的行为进行编码。为此,你可以从理论的延伸中汲取一些想法。因此,您需要一个包含类、字段和id列的表,并构建一个自定义请求来检索所有已翻译的字段。