Иерархия моделей в Laravel?
Для того, чтоб описать данные взаимоотношения в Laravel мы можем создать одну миграцию таблицы product, описать у неё все возможные свойства, что упоминаются в типах (класс, тип, артикул, ширина, высота, материал, огнеупорное ли, покрыты ли лаком), после чего создавать модели необходимых изделий, сохраняя требуемое нам наследование, но тут вопрос - как, например, указать для модели, при работе с общей таблицей (где хранятся вообще все продукты) возвращать только те, у которых указан, например, класс = (int) 2?
Вы Собираетесь хранить довольно много лишних,  пустых ячеек  и  создавать вагон ненужных моделей. Не делайте так. Продукты делятся не на 2 класса, а на 2 типа.  А тип(Окна пластиковые,  Окна деревянные) - это  одно из свойств продукта(материал). 
1. Одна таблица для продуктов, где храните артикул и  обязательные поля для всех продуктов.
2. Одна таблица для свойств продуктов, где храните все свойства для продуктов.
3. Связь многие ко многим расскажет к какому продукту какое свойство относится. Это позволит гибко добавлять свойства  и  прикреплять их к продуктам без вмешательства программиста. 
4. Одна таблица - одна модель. Можно заморочится и с ДМ и  с  репозиториями и т.д. но если по простому, то одна таблица - одна модель. Свзяывайте их реляциями.
Думаю стоит адаптировать ECS паттерн, а конкретнее Entity + Component. Думаю, идеально подойдёт.
P.S. Изначально он разработан для геймдева, где есть лучник, лучник-маг, лучник-маг-с-копьём и т.д. При этом без ограничений на характеристики и их связи.