Doctrine2: динамические ассоциации сущностей, многие targetEntity отображаются в одном поле - PullRequest
5 голосов
/ 29 марта 2012

У меня есть объект с именем Event, который имеет

  • поле «relatedEntity», содержащее имя класса другой сущности в наборе
  • поле "targetId" этой конкретной сущности "relatedEntity"

Теперь я бы хотел как-то получить доступ к этой целевой сущности внутри моей Event-Entity, но теперь я уверен, как это сделать. Я хотел бы получить доступ к различным целевым сущностям в шаблоне ветки, используя что-то вроде

{% if event.getClassName() == "User" %}
  {{ if event.getUser().getName() }}
{% endif %}

Редактировать: Просто чтобы прояснить, единственное, что меня интересует, - это как правильно создать отношение. Вне мира ORM вы, вероятно, использовали бы для этого оператор соединения. Как будто у меня много целевых сущностей, сопоставленных одним полем.

Пока что я использую хранилище сущностей и DI для загрузки связанных сущностей, но я нахожу, что ужасно зная, что есть оператор JOIN, который я мог бы использовать:

public function getUpcomingEvents(){
        $query = $this->createQueryBuilder('E')
        ->where('E.resolved = false')
        ->orderBy('E.notify_date', 'ASC')
        ->setMaxResults( $limit );
    $res = $query->getQuery()->getResult();
    $res = $this->attachAssociatedObjects($res);
    return $res;
}

public function attachAssociatedObjects($res){
    foreach ($res as $key => $entity) {
            $assocObject = $this->getEntityManager()->getReference('My\Bundle\Entity\\'.$entity->getClassName(), $entity->getTargetId());
            $res[$key]->setAssociatedObject($assocObject);
    }
    return $res;
}

1 Ответ

1 голос
/ 29 марта 2012

Веточка Функция атрибута - это то, что вам нужно.

...