Есть проект на Symfony (1.4) + Doctrine (1.2)
В проекте следующая архитектура классов: AbstractProduct, от него унаследованы AlphaProduct, BetaProduct и GammaProduct классы, используя column_aggregation и поле 'type' для различения классов.
В одном из контроллеров мне необходимо создать новый объект по заранее известному типу. Т.е. (к примеру) если тип 1 — надо создать AlphaProduct, 2 — BetaProduct и т.д. Т.е. создать дочерний объект нужного типа по известному типу.
На данный момент это выглядит так:
$classname = 'AbstractProduct';
foreach (Doctrine::getTable('AbstractProduct')->getOption('subclasses') as $subclass) {
$inheritanceMap = Doctrine::getTable($subclass)->getOption('inheritanceMap');
if ($inheritanceMap["type"] == $type) {
$classname = $subclass;
break;
}
}
$this->product = new $classname();
Но идея сканить все подклассы в поиске нужного мне очень не нравится. В Doctrine 2 эта задача решается проще. Но можно ли как-то решить ее в Doctrine 1?