public function testGetIdentityValues() { $this->config['stdClass'] = array('excludedField' => array('excluded' => true), 'identityField' => array('identity' => true), 'regularField' => array()); $fields = array(array('name' => 'excludedField'), array('name' => 'identityField'), array('name' => 'regularField')); $entity = new \stdClass(); $entity->excludedField = 'excludedValue'; $entity->identityField = 'identityValue'; $entity->regularField = 'regularValue'; $this->fieldProvider->expects($this->once())->method('getFields')->with(get_class($entity), true)->will($this->returnValue($fields)); $this->assertEquals(array('identityField' => 'identityValue'), $this->helper->getIdentityValues($entity, $fields)); }
public function testGetIdentityValues() { $this->config['stdClass'] = ['excludedField' => ['excluded' => true], 'identityField' => ['identity' => true], 'regularField' => []]; $fields = [['name' => 'excludedField'], ['name' => 'identityField'], ['name' => 'regularField']]; $entity = new \stdClass(); $entity->excludedField = 'excludedValue'; $entity->identityField = 'identityValue'; $entity->regularField = 'regularValue'; $this->fieldProvider->expects($this->once())->method('getFields')->with(get_class($entity), true)->will($this->returnValue($fields)); $value = $this->helper->getIdentityValues($entity); $this->assertEquals(['identityField' => 'identityValue'], $value); $this->assertSame($value, $this->helper->getIdentityValues($entity)); }
/** * @param object $entity * @param array $searchContext * * @return object|null */ protected function findExistingEntityByIdentityFields($entity, array $searchContext = []) { $entityName = ClassUtils::getClass($entity); $identityValues = $searchContext; $identityValues += $this->fieldHelper->getIdentityValues($entity); foreach ($identityValues as $fieldName => $value) { if ($value !== null || $this->fieldHelper->isRequiredIdentityField($entityName, $fieldName)) { continue; } unset($identityValues[$fieldName]); } return $this->findEntityByIdentityValues($entityName, $identityValues); }
/** * @param object $entity * @param array $searchContext * @return null|object */ protected function findExistingEntity($entity, array $searchContext = array()) { $entityName = ClassUtils::getClass($entity); $identifier = $this->databaseHelper->getIdentifier($entity); $existingEntity = null; // find by identifier if ($identifier) { $existingEntity = $this->databaseHelper->find($entityName, $identifier); } // find by identity fields if (!$existingEntity && (!$searchContext || $this->databaseHelper->getIdentifier(current($searchContext)))) { $identityValues = $searchContext; $identityValues += $this->fieldHelper->getIdentityValues($entity); $existingEntity = $this->findEntityByIdentityValues($entityName, $identityValues); } return $existingEntity; }