xanf
@xanf
JS разработчик / владелец небольшой компании

Создание объекта класса-потомка в Doctrine по известному полю type (column_aggregation)

Есть проект на 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?
  • Вопрос задан
  • 2483 просмотра
Пригласить эксперта
Ответы на вопрос 1
zizop
@zizop
А есть ли у вас классы этих моделей? По идее абстрактный класс должен иметь что-то вроде:
AbstractProduct::getSubclasses(). Тогда не надо будет лишний раз лезть в БД. Думаю в этом случае такой хардкодинг будет уместен.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы