Полиморфизм наследования одной таблицы в Учении 2 - PullRequest
0 голосов
/ 23 марта 2011

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

Однако, допустим, что в какой-то момент я хочу изменить объект из одного подкласса в другой. Это возможно? редактировать столбец дискриминатора?

Ответы [ 2 ]

3 голосов
/ 23 марта 2011

Лучший вопрос, чем "Возможно ли это" - "Правильно ли это делать"?Это не.Дискриминаторный столбец не является частью вашего бизнес-логического объекта, он является частью слоя Doctrine2.Вы можете найти способ взломать его, но это приводит к грязному коду.Если у вас есть объект «A» и вам нужен объект «B», все, что вам нужно сделать, это уничтожить A и создать B, как и в случае с «обычными» непостоянными объектами.Таким образом, ваш код более читабелен и менее связан со слоем БД, который вы, возможно, захотите изменить в будущем.

0 голосов
/ 14 апреля 2015

Если вам нужно изменить подклассы, вы можете написать перенос Doctrine и использовать DBAL для переноса столбца дискриминатора (и, вероятно, некоторых других полей, специфичных для класса). @smentek правильно сказал, что столбец дискриминатора должен быть ограничен слоем БД.

Проблема, которая у вас есть, на самом деле не связана с полиморфизмом. Это больше связано с необходимостью рефакторинга структуры вашей базы данных и бизнес-объектов. Вы, вероятно, не хотите изменять классы объектов во время выполнения. Тем не менее, есть веские аргументы в пользу рефакторинга классов по ходу проекта.

...