2012-03-28 6 views
5

ho un'entità chiamata evento che haDoctrine2: associazioni entità dinamica, molti targetEntity mappato da un campo

  • un campo "associatedEntity" che contiene il nome della classe di un'altra entità dello Bundle
  • un campo " targetId "di quella specifica entità" associataEntity "

Vorrei ora accedere a questa entità di destinazione all'interno della mia Event-Entity in qualche modo, ma ora sono sicuro di come farlo. Mi piacerebbe accedere alle diverse entità di destinazione in un modello ramoscello usando qualcosa come

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

Edit: Giusto per essere chiari, l'unica cosa Sono interessato finora è come creare la relazione in modo corretto. Al di fuori di un mondo ORM probabilmente useresti una dichiarazione di join per questo. È come se avessi molte Entità di destinazione mappate da un campo.

im Finora utilizzando il repository di entità e DI per caricare le entità associate, ma trovo che brutto sapere v'è una dichiarazione JOIN che ho potuto utilizzare:

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; 
} 
+0

Stai cercando di fare in modo che Event.target punti a diverse classi target? Se è così, potrebbe essere un po 'impegnativo. – Cerad

+0

Sì, questo è quello che mi piacerebbe fare! – worenga

risposta

Problemi correlati