Как реализовать и хранить наследумые объекты/модели?

Читаю сейчас литературу по шаблонам проектирования. И рассматривается пример:

Есть класс Product, от него наследуются BookProduct и CdProduct и они отличаются некоторыми методами и свойствами.
У BookProduct есть свойства numPages и метод getNumberOfPages, а у CdProduct playLenght и getPlayLenght.

И что то не могу понять как это реализовать в рамках Eloquent. Это модель Product должна быть или все же 2 модели BookProduct и CdProduct, следовательно тогда это 2 таблицы?
А если типов продуктов будет много, это для каждого типа по таблице нужно создавать? С другой стороны если одна таблица, тогда получается слишком много колонок будет. А если начнется дальше наследование от BookProduct и CdProduct?

В общем на бумаге все выглядит хорошо и красиво, а как хочу на практике в Laravel поковыряться, так ступор.
  • Вопрос задан
  • 230 просмотров
Пригласить эксперта
Ответы на вопрос 4
palkan_karabov
@palkan_karabov
PressF1
Я бы сделал так:
Таблицы: cds, books, products. Добавил бы к ним связи 1к1.
Соответственно модели: Cd, Book, Product. У Cd и Book связь belongsTo к Product
Ответ написан
@cybersnail
Зачем что-то наследовать? Просто нужно реализовать дополнительные поля для товаров, посмотрите как все магазины написаны, они позволяют создавать любые товары с любыми дополнительными опциями.
Ответ написан
solotony
@solotony
code for food, caviar preferably
я делаю так
вначале класс MyProduct наследую от базовой Model в котором реализована общая логика
и уже от него отнаследованы BookProduct CdProduct соответственно никаких объектов MyProduct никогда не существует, таблицы для нее нет

либо общую логику можно сделать трейтом, но мне кажется правильнее здесь делать именно наследование
Ответ написан
Ваш вопрос - калька с уже заданного ранее. Реально они появляются примерно раз в месяц... ;)
Мой ответ на него: Как лучше всего реализовать подобную архитектуру?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы