Доброго времени суток, тостерчане!
Вопрос собственно такой.
Как максимально удобно организовать структуру БД для написания мультиязычной CMS?
Цель такая: Нужно как то хранить переводы названий разделов, переводы новостей, страниц, и чтоб потом можно было организовать поиск по сайту а конкретно по переводам того или иного языка.
Я организовал вот так (структура таблицы с переводами новостей и разделов в данном случае):
----------------------------------------------------------------
| id | section_id | news_id | lang | title | description | ... |
----------------------------------------------------------------
Но при таком подходе когда нужно выбрать переводы на любом языке, то все супер если такая запись есть, а если нет, то нужно выбрать запись на языке который заведен по умолчанию. Все как бы супер, но если выбираю например Новости, которых 1000 то это +1000 запросов на получение переводов.
Плюсы в таком подходе несколько:
- не нужно лезть в БД и изменять структуру если добавляется новый язык
- Очень удобно реализовывать поиск
- Все переводы хранятся в одной таблице
Из минусов только то, что куча запросов, но может это у меня не хватает ума правильно организовать выборку.
Тогда может подскажете как правильно это разрулить?
Пример запроса ниже:
$news = News::get();
foreach ($news as $nws) {
$data[] = [
'id' => $nws->id,
'good' => $nws->good,
'translates' => $nws->translations()->where('lang', App::getLocale())->get()->toArray()
];
}
На хабре есть статья, но я подумал, может тут кто поделится еще своим опытом.