1

Я использую преобразование наследования доктрин в проекте, который создает набор уникальных сущностей, каждый из которых расширяет базовый объект. Поскольку маршрут не знает, какие объекты идут с каким базовой строкой, я должен запросить базу данных дважды, чтобы захватить строку, я хочу с правой FIELDSET:Самый чистый способ идентифицировать сущность с отображением наследования доктрин в zf2

// in a controller action: 

    // locate the event entity record and determine the event type 
    $entity = 'AdminEvents\Entity\Event'; 
    $event = $this->getEntityManager()->find($entity, $eventID); 
    $eventType = $this->getEntityManager()->getClassMetadata(get_class($event))->discriminatorValue; 

    // locate the record we're really looking for in the unique extended entity 
    $entity = 'AdminEvents\Entity\\' . $eventType; 
    $event = $this->getEntityManager()->find($entity, $eventID); 

Есть ли более чистый способ сделать это ?

ответ

0

Возможно, вы должны определить класс \AdminEvents\Entity\AbsractEvent, если вы еще этого не сделали. Тогда каждый из ваших STI лиц должны расширить это, и вы можете сделать instanceof (или другой логики), чтобы выяснить, какой конкретный тип вы получили:

// locate the record using the AbstractEntity 
    $entity = 'AdminEvents\Entity\AbstractEntity'; 
    $event = $this->getEntityManager()->find($entity, $eventID); 

слово предостережения: в SPL функции get_class часто возвращают Doctrine Proxy, поэтому не следует полагаться на это непосредственно, чтобы проверить тип возврата. Вы можете использовать класс Doctrine 'ClassUtils'

\Doctrine\Common\Util\ClassUtils::getRealClass(get_class($event)); 

 Смежные вопросы

  • Нет связанных вопросов^_^