Картирование с учением 2 - PullRequest
1 голос
/ 02 мая 2011

У меня есть вопросы, которые представлены в моей базе данных 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; ключ = heading_quest_1; lang_iso = en_UK; text = "Заголовок вопроса 1" id_lang_data = 2; ключ = heading_quest_1; lang_iso = fr; текст = "Titre de la question 1"

Мне нужно отобразить эти отношения для Учения 2, но я не знаю, что делать. Я попытался многие-к-одному и один-ко-многим , но это не работает.

У кого-нибудь есть идея, пожалуйста? Спасибо

РЕДАКТИРОВАТЬ : Я понимаю, что это даже сложнее, чем я думал. Действительно, моя таблица t_lang_data может хранить строки для многих таблиц, таких как t_questions, t_articles и так далее. Но в сопоставлении кажется, что мы можем сопоставить только две таблицы вместе.

Так как я могу это сделать?

1 Ответ

1 голос
/ 02 мая 2011

У вас действительно есть одна из наиболее распространенных проблем перевода с базами данных.

Если вы хотите иметь эффективный режим перевода без повторного изобретения колеса, вам следует использовать эту библиотеку: https://github.com/l3pp4rd/DoctrineExtensions.

Это было рекомендовано командой doctrine2 и отлично работает для меня.Документация по переводу приведена здесь: https://github.com/l3pp4rd/DoctrineExtensions.

Также, если вы используете symfony2, выделенный пакет находится здесь: http: // github.com/stof/DoctrineExtensionsBundle

Более тогоПоведение перевода работает так же, как и вы, используя таблицу, выделенную для хранения переведенной строки со ссылкой на исходный тип и идентификатор.

...