2016-04-06 6 views
0

Ich habe Probleme mit der Berechnung von Werten für Änderungssatz. Ich brauche alten und neuen Wert für Referenzeinheiten innerhalb der aktuellen. Tatsache ist, dass diese Entitäten mit einem Proxy-Objekt gefüllt sind, um zu vermeiden, dass es von db geladen wird. Weil ich bereits alten Wert und neuen Wert für ID kenne. So Code wird wie folgt aussehen:Berechne changeSet für Objekt mit Proxy-Entität in Eigenschaft für Protokollierungszweck - Lehre

// in code 
$entity->setEntity1($em->getReference(Entity1::class, $id)); 

...

// event callback for getting diff 
protected function postUpdate(LifecycleEventArgs $args) 
{ 
    $em   = $args->getEntityManager(); 
    $uow   = $em->getUnitOfWork(); 
    $entity  = $args->getEntity(); 
    $classMetadata = $em->getClassMetadata(get_class($entity)); 

    $uow->computeChangeSet($classMetadata, $entity); 
    $changeSet = $uow->getEntityChangeSet($entity); 
    echo json_encode($changeSet); 
} 

und Ergebnis ist:

{ 
    "entity1": [ 
     { 
      "__initializer__": {}, 
      "__cloner__": {}, 
      "__isInitialized__": false 
     }, 
     { 
      "__initializer__": {}, 
      "__cloner__": {}, 
      "__isInitialized__": false 
     } 
    ] 
} 

und gewünschte Ausgangs wäre:

{ 
    "entity1": [ 101, 105] 
} 

So Proxy-Entität wird in seine Eigenschaft übersetzt. Wie kann ich das vermeiden und habe stattdessen nur IDs?

Dank

Antwort

0

Lösung ist wirklich einfach. Ich wurde von der gedruckten Ausgabe von json getäuscht. Objekt in diesem Schlüssel von changeSet ist nicht einfach. Es ist das ganze Proxy-Objekt, so dass die Lösung nur getId dieses Proxys aufrufen und den Wert im Change-Set-Array ersetzen soll.

// event callback for getting diff 
protected function postUpdate(LifecycleEventArgs $args) 
{ 
    $em   = $args->getEntityManager(); 
    $uow   = $em->getUnitOfWork(); 
    $entity  = $args->getEntity(); 
    $classMetadata = $em->getClassMetadata(get_class($entity)); 

    $uow->computeChangeSet($classMetadata, $entity); 
    $changeSet = $uow->getEntityChangeSet($entity); 

    if (array_key_exists('entity1', $changeSet) { 
     if ($changeSet['entity1'][0] != null) { 
      $changeSet['entity1'][0] = $changeSet['entity1'][0]->getId(); 
     } 

     if ($changeSet['entity1'][1] != null) { 
      $changeSet['entity1'][1] = $changeSet['entity1'][1]->getId(); 
     } 
    } 
    // do something with it 
} 

Ich hoffe, dass dies anderen helfen und Zeit verschwenden wird, wie ich bin.