Я нахожусь в неудачном положении, поддерживая проект 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
, но это привело бы к значительным накладным расходам на создание отдельного запроса к БД при каждом обращении к названию продукта - для каждого отдельного продукта.