У меня есть структура таблицы:

Страница может иметь множество заголовков с разными переводами. В Symfony:
Model/Page.php — объект главной страницы
Model/Page/PageFieldTitle.php — сущность для таблицы page_field_title.
Меня больше всего беспокоит, что здесь представляет собой объект значения для заголовка? Есть несколько концепций:
[*]Название — первое, а языковой стандарт — второе. Оба объекта значений используются в сущности PageFieldTitle. [*]Title — один, Locale — второй, и должен быть третий: TitleLocalized, который будет использовать объекты значений Title и Locale. TitleLocalized будет использоваться в сущности PageFieldTitle. [*]Должны быть Locale и TitleLocalized. TitleLocalized должен содержать внутри Locale и строку. TitleLocalized будет использоваться в сущности PageFieldTitle. 1 — отдельные объекты значений
Реализация этого сценария получена.
класс PageFieldTitle { используйте PageFieldTrait; #[ORM\Embedded(префикс столбца: false)] защищенный заголовок страницы $value; // объект значения публичная функция __construct (PageTitle $value, Locale $locale) { $this->setValue($value); $this->setLocale($locale); } публичная функция getValue(): PageTitle { вернуть $this->значение; } общедоступная функция setValue(PageTitle $value): PageFieldTitle { $это->значение = $значение; вернуть $это; } } черта, чтобы я мог легко создавать больше полей:
trait PageFieldTrait { #[ОРМ\Идентификатор] #[ORM\ManyToOne(targetEntity: Page::class)] #[ORM\JoinColumn(name: 'page_id', referencedColumnName: 'id')] защищенная страница $page; // объект главной страницы #[ORM\Embedded(префикс столбца: false)] защищенная локаль $locale; // объект значения публичная функция getLocale(): Локаль { вернуть $this->локаль; } общедоступная функция setLocale(Locale $locale): self { $this->locale = $locale; вернуть $это; } общедоступная функция setPage(Page $page): self { $this->page = $page; вернуть $это; } } В сущности Page есть связь ManyToOne, и она работает нормально.
2 и 3
Реализация также возможна, протестирована, и я могу использовать встроенные объекты внутри встроенных объектов с помощью доктрины. Так что каждый подход выглядит хорошо.
Вопросы [*]Какой подход лучше и почему? [*]Есть ли возможность избежать использования Model/Page/PageFieldTitle.php, который предназначен только для хранения объекта значения? Для этого нелегко работать с отношением OneToMany.