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