Доброго времени суток, %username%!
Смотри какая штука. Ответ на вопрос, описанный ниже, наверняка лежит на поверхности, но что-то никак не удается его сформулировать.
У нас есть абстрактная фабрика, которая выпускает продукцию. Абсолютно вся продукция обладает таким свойством как
артикул. Кроме того, вся продукция делится на
два класса:
- Двери
- Тип: Двери межкомнатные (свойства: материал, ширина, высота, цвет)
- Тип: Двери входные (свойства: материал, ширина, высота, огнеупорность)
- Окна
- Тип: Окна пластиковые (свойства: материал, ширина, высота, цвет)
- Тип: Окна деревянные (свойства: материал, ширина, высота, покрыты ли лаком)
Для того, чтоб описать данные взаимоотношения в Laravel мы можем создать одну миграцию таблицы product, описать у неё все возможные свойства, что упоминаются в типах (класс, тип, артикул, ширина, высота, материал, огнеупорное ли, покрыты ли лаком), после чего создавать модели необходимых изделий, сохраняя требуемое нам наследование, но тут вопрос - как, например, указать для модели, при работе с общей таблицей (где хранятся вообще все продукты) возвращать только те, у которых указан, например, класс = (int) 2?
Более того, если мне необходимо вернуть все окна - я хочу просто дернуть модель /App/Models/Products/Doors и получить коллекцию вообще всех дверей, а если дерну /App/Models/Products/Doors/Interior - то только межкомнатные двери.
В общем - как лучше в таком случае организовать eloquent? Для каждого изделия создавать свою таблицу, но как тогда включать её во все "родительские" модели?
Или если всю продукцию хранить в одной, а при добавлении нового изделия (с новым свойством, к примеру) - просто писать миграцию на добавление поля? Но как тогда заставить "родительские" модели возвращать свеже-добавленные, а конкретную модель добавленного изделия - только её?
Или лучше ключевые свойства, такие как класс и тип вынести в отдельные таблицы, и связать их hasMany/hasOne?
Подскажите, пожалуйста.