2012-03-28 9 views
5

Ich habe ein Entity-Ereignis, dasDoctrine2: dynamische Einheit Verbände, viele targetEntity durch ein Feld zugeordnet

namens
  • ein Feld „associatedEntity“ enthält den Klassennamen eines anderen Unternehmens im Bundle
  • ein Feld " targetId“dieses spezifisch‚associatedEntity‘Entity

ich möchte nun diese Zieleinheit in meinem Ereignis-Entity zugreifen irgendwie aber im jetzt sicher, wie es zu tun. Ich mag das verschiedene Ziel Entities in einem Zweig Vorlage etwas wie

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

Bearbeiten mit zuzugreifen: Just klar zu sein, das einzige, was im Interesse so weit ist wie die Beziehung richtig zu erstellen. Außerhalb einer ORM-Welt würden Sie wahrscheinlich eine Join-Anweisung dafür verwenden. Es ist wie ich viele Ziel-Entities durch ein Feld zugeordnet haben.

Bisher im das Objekt-Repository und DI mit den zugehörigen Einheiten zu laden, aber ich finde, dass hässlich zu wissen, gibt es eine Erklärung JOIN ist, die ich verwenden könnte:

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

Möchten Sie Event.target auf verschiedene Zielklassen verweisen lassen? Wenn das der Fall ist, könnte das etwas herausfordernd sein. – Cerad

+0

Ja, das würde ich gerne machen! – worenga

Antwort