/**
  * {@inheritdoc}
  */
 public function setValue($entity, FieldMetadata $metadata, $value)
 {
     $oldRelatedEntities = array();
     foreach ($this->getValue($entity, $metadata) as $oldRelatedEntity) {
         $oldRelatedEntities[$this->doctrineHelper->getEntityIdentifierValue($oldRelatedEntity)] = $oldRelatedEntity;
     }
     foreach ($value as $relatedEntity) {
         $this->setRelatedEntityValue($relatedEntity, $metadata, $entity);
         unset($oldRelatedEntities[$this->doctrineHelper->getEntityIdentifierValue($relatedEntity)]);
     }
     foreach ($oldRelatedEntities as $oldRelatedEntity) {
         $this->setRelatedEntityValue($oldRelatedEntity, $metadata, null);
     }
 }
Exemplo n.º 2
0
 /**
  * {@inheritdoc}
  */
 public function merge(FieldData $fieldData)
 {
     $entityData = $fieldData->getEntityData();
     $masterEntity = $entityData->getMasterEntity();
     $fieldMetadata = $fieldData->getMetadata();
     $entities = $entityData->getEntities();
     $relatedEntities = [];
     foreach ($entities as $entity) {
         $values = $this->accessor->getValue($entity, $fieldMetadata);
         foreach ($values as $value) {
             $key = $this->doctrineHelper->getEntityIdentifierValue($value);
             $relatedEntities[$key] = $value;
         }
     }
     $collection = new ArrayCollection(array_values($relatedEntities));
     $this->accessor->setValue($masterEntity, $fieldMetadata, $collection);
 }
Exemplo n.º 3
0
 /**
  * @expectedException \Oro\Bundle\EntityMergeBundle\Exception\InvalidArgumentException
  * @expectedExceptionMessage Multiple id is not supported.
  */
 public function testGetEntityIdentifierValueFails()
 {
     $entityClass = 'stdClass';
     $entity = new \stdClass();
     $identifiers = array('id1' => 1, 'id2' => 2);
     $this->entityManager->expects($this->once())->method('getMetadataFactory')->will($this->returnValue($this->metadataFactory));
     $this->metadataFactory->expects($this->once())->method('getMetadataFor')->with($entityClass)->will($this->returnValue($this->metadata));
     $this->metadata->expects($this->once())->method('getIdentifierValues')->with($entity)->will($this->returnValue($identifiers));
     $this->doctrineHelper->getEntityIdentifierValue($entity);
 }