2016-04-06 13 views
0

Değişiklik kümesi için değer hesaplamada sorun yaşıyorum. Mevcut olanın içindeki referans varlıklar için eski ve yeni değere ihtiyacım var. Thing, bu girişlerin db'den yüklenmesini önlemek için proxy nesnesiyle doldurulur. Çünkü zaten eski değeri ve ID için yeni değeri biliyorum. Yani kodu şöyle bakıyor:Değişikliği kaydetme amacı için mülkte proxy öğesi olan nesne için ayarla - Doctrine

// 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); 
} 

ve sonucu geçerli:

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

ve istenen çıkış olacaktır:

{ 
    "entity1": [ 101, 105] 
} 

Bu nedenle vekil varlığın mülküne çevrilmesi. Bunu yapmaktan nasıl sakınabilirim ve bunun yerine yalnızca kimliğim olsun?

Teşekkür

cevap

0

Çözüm gerçekten basit bir tanesidir. Json'un basılı çıktısı beni kandırdı. ChangeSet anahtarının içindeki nesne basit değildir. Tüm proxy nesnesi bu yüzden çözüm sadece bu proxy'nin getIdini çağırmak ve değişiklik seti dizisinin içindeki değeri değiştirmek içindir.

// 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 
} 

Bunun başkalarına ve boşa harcanan zamana yardımcı olacağını umuyoruz.

İlgili konular