Как реализовать и хранить наследумые объекты/модели?
Читаю сейчас литературу по шаблонам проектирования. И рассматривается пример:
Есть класс Product, от него наследуются BookProduct и CdProduct и они отличаются некоторыми методами и свойствами.
У BookProduct есть свойства numPages и метод getNumberOfPages, а у CdProduct playLenght и getPlayLenght.
И что то не могу понять как это реализовать в рамках Eloquent. Это модель Product должна быть или все же 2 модели BookProduct и CdProduct, следовательно тогда это 2 таблицы?
А если типов продуктов будет много, это для каждого типа по таблице нужно создавать? С другой стороны если одна таблица, тогда получается слишком много колонок будет. А если начнется дальше наследование от BookProduct и CdProduct?
В общем на бумаге все выглядит хорошо и красиво, а как хочу на практике в Laravel поковыряться, так ступор.
я делаю так
вначале класс MyProduct наследую от базовой Model в котором реализована общая логика
и уже от него отнаследованы BookProduct CdProduct соответственно никаких объектов MyProduct никогда не существует, таблицы для нее нет
либо общую логику можно сделать трейтом, но мне кажется правильнее здесь делать именно наследование
Я бы сделал так:
Таблицы: cds, books, products. Добавил бы к ним связи 1к1.
Соответственно модели: Cd, Book, Product. У Cd и Book связь belongsTo к Product
Зачем что-то наследовать? Просто нужно реализовать дополнительные поля для товаров, посмотрите как все магазины написаны, они позволяют создавать любые товары с любыми дополнительными опциями.
Antonio Solo, ну, с этим можно поспорить. Зато все универсально и не надо плодить классы под каждый товар, свой класс под каждый тип товара - дикость. Представляю, как вы начинаете плодить NosovoyPlatokProduct, PugovitsaProduct, IgolkaProduct, SpichkiProduct, ZazhigalkaProduct... Не устанете?