я делаю так
вначале класс MyProduct наследую от базовой Model в котором реализована общая логика
и уже от него отнаследованы BookProduct CdProduct соответственно никаких объектов MyProduct никогда не существует, таблицы для нее нет
либо общую логику можно сделать трейтом, но мне кажется правильнее здесь делать именно наследование