Всем привет.
Есть задача, сделать к посту кастомные поля. То есть, есть разделы статей, есть наборы полей. Для каждого раздела свой набор полей. В админке можно добавлять, удалять редактировать наборы полей + привязывать набор к разделам статей. В зависимости от набора полей, при добавлении статьи, показываются разные инпуты.
Например, на Хабре, если выбрать тип "Перевод" - будут показываться поля "Источник" и "Автор оригинального текста". Если выбрать событие - будут показываться "Тип события", "Город", "Адрес", "Стоимость" и т.д.
Нужно то же самое, только управление этими полями должно быть из админки. В качестве ORM на проекте используется Doctrine2. Вопрос:
Как лучше сделать такую структуру в БД?
Первое что приходит на ум, это создание дополнительных таблиц (product_details_fieldSetName), с определенным набором полей. При создании нового набора полей делать create table, при изменении делать alter table. И в зависимости от набора полей, джойнить нужную таблицу. Но как такой вариант подружить с Doctrine2?
Мне кажется, вариант с EAV гораздо хуже предложенного мной в вопросе, именно поэтому я его не упомянул. С EAV остается проблема: Как использовать паттерн Data Mapper, добавляется проблема с производительностью, и получается, что в БД все поля будут иметь один и тот же тип... не хочу хранить int в поле с типом TEXT.
Сделайте сущность(entity) где будут храниться разные поля. В этой сущности будут хранится: тип поля, название, значения и ссылка(привязка) на сущность к которой это поле привязано. Привязку можно забить строго через yml или анотации, или же написать свой метод/класс для этого.