Расширенные / пользовательские Doctrine ORM отношения (переведенные объекты TYPO3) - PullRequest
0 голосов
/ 21 апреля 2020

Я нахожусь в неудачном положении, поддерживая проект TYPO3. TYPO3 «ORM» очень медленный и неудобный в использовании, поэтому я хочу использовать Doctrine ORM для некоторых моих операций чтения.

TYPO3 имеет довольно странный способ хранения переводов, поэтому мои таблицы выглядят как-то например:

> products
 id
---
123
 64
 37

> product_names
product_id | locale | name
----------------------------------
        64 | en     | My Product
        64 | de     | Mein Artikel

Если текущий языковой стандарт всегда доступен в некоторой глобальной переменной magi c, есть ли способ сопоставить его со следующим классом в Doctrine ORM? (По сути, добавление stati c AND locale = "en" к условию JOIN. Или, возможно, в пользовательском типе? Или какой-то прокси? Я не знаю.)

class Product {
    private string $id;
    private ProductName $name;
}

class ProductName {
    private string $name;
}

Очевидно, я на самом деле ничего не может изменить в базе данных или структуре классов, поскольку TYPO3 ожидает этого таким образом.

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

1 Ответ

0 голосов
/ 22 апреля 2020

Эта структура не является обычным способом обработки переводов TYPO3.

Обычно переводы обрабатываются копией исходной записи (в той же таблице), но с указателем на оригинал (l18n_parent) и поле, указывающее текущий язык (sys_language_uid).

Дополнительный TYPO3 обрабатывает языки не по языковым стандартам, а по объявленным языковым идентификаторам. Таким образом, один и тот же идентификатор может обозначать разные языки в разных установках.

Мне кажется, что ваша структура данных импортирована откуда-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...