fl4r3
@fl4r3
Кино, вино и домино

Существует ли Translatable Behavior для Doctrine с хранением переводов в json типе?

Добрый день. Последний раз использовал Doctrine пару лет назад. Для перевода полей сущности использовал StofDoctrineExtensionsBundle где отдельная таблица в БД для хранения переводов, либо по таблице переводов на каждую сущность и они потом джоинились. С появлением в MySql >=5.7.8 поддержки JSON полей нативно появилась возможность хранить переводы в одной колонке:

Колонка name в БД теперь может иметь содержимое:
{"ru": "Тест", "en": "Test"}

и теперь содержимое будет вытаскиваться с ключом ru или en в зависимости от текущей локали или сохранятся под правильным ключом в БД при сабмите формы со значением name=Test2&... , и перевод делается элементарно и просто.

$newsItem->name; // Returns 'Name in English' given that the current app locale is 'en'
$newsItem->getTranslation('name', 'nl'); // returns 'Naam in het Nederlands'

app()->setLocale('nl'); // Change current locale to nl
$newsItem->name =  'Sets name for nl locale';


Сейчас использую такое расширение поведения в AR Eloquent, но с усложнением бизнес логики присматриваюсь опять к Doctrine и такое поведение там бы было очень кстати, но никак не могу нагуглить что-то подобное.
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ответы на вопрос 1
fl4r3
@fl4r3 Автор вопроса
Кино, вино и домино
Не нашел готового решения. Буду, наверное, делать через произвольный Doctrine тип, что по сути будет в рантайме Value Object с полями языков en и ru и внутренней валидацией, а при сохранении в БД сериализоваться в json {"en": "Test", "ru": "Тест"} и наоборот.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы