CodeIgniter и многоязычная база данных

Я создаю мультиязычное приложение на CodeIgniter, и я немного запутался в вопросе о том, как сделать базу данных правильным образом.
Я делал это раньше, но используя «самый простой» подход:

Настольные новости

id
title_en
title_de
title_rus
title_fr

и так далее…
Это просто, потому что вставка в базу данных выполняется одним запросом, выбор также из одного запроса, легкая работа.
И когда я хочу отобразить язык, который мне нужен для пользователя, я выбираю только поле, которое соответствует.
Используя этот подход, все, что зависит от базы данных, легко (вставить, выбрать, обновить).
Но когда мне нужно добавить другой язык, многое нужно изменить.
Поэтому я подумал, что давайте попробуем поместить все текстовые поля, которые различны для каждого языка, в другую таблицу.

Настольные новости

id
date
author

Стол news_lang

id
news_id
title
language

Поэтому я разделил его на две таблицы, которые должны устранить проблему с новыми языками для меня, и это должно сделать базу данных более чистой.
С выбором текущего языка проблем нет:

$this->db->select("news.id, news.date, news.author, news_lang.title");
$this->db->join("news_lang", "news_lang.news_id = news.id");
$this->db->where("news.id", $news_id);
$this->db->where("news_lang.language", $language);
$this->db->get("news")->row();

Но что делать, если для редактирования мне нужны все языковые поля?
Возможно, мне придется установить их на другой объект или массив, который не так хорош.
И главный вопрос, который заставляет меня задаться здесь — как вставить все данные?
При первом подходе я делал вещи в одном методе в модели. Теперь я не думаю, что есть какой-то другой путь без использования какого-либо цикла.
Я использую неправильную логику? Есть ли другой «чистый» способ сделать это?
Я думал о том, чтобы поместить все данные в одно поле, не создавая две таблицы, а сделав сериализацию или кодировку данных языка с помощью json, а затем поместив их в одно поле, но я не совсем уверен, что это отличная идея.
Не могли бы вы дать мне какие-нибудь советы?
Спасибо,
Майк

1

Решение

То, что я хотел бы сделать, это иметь отдельные таблицы для каждого языка, и тогда я бы не стал напрямую обращаться к объекту базы данных codeigniter, а скорее создал бы фабрику, которая давала бы мне нужную модель в зависимости от того, для какого языка я ее настроил. затем с этого момента вы будете использовать любой объект БД, полученный на фабрике, как если бы был только один язык.

что-то вроде этого:

$myDBmodel = $this->dbFactory('news','fr');

$myDBmodel->select("id, date, author, etc...");

тогда есть фабрика:

function dbFactory($table, $language) {

switch($language) {
case 'fr':

(psudocode: return french version of db model)

default:

(psudocode:  return whatever your default language version of the model is)
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]