function EntityContentBase::updateEntity

Same name and namespace in other branches
  1. 9 core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php \Drupal\migrate\Plugin\migrate\destination\EntityContentBase::updateEntity()
  2. 8.9.x core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php \Drupal\migrate\Plugin\migrate\destination\EntityContentBase::updateEntity()
  3. 11.x core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php \Drupal\migrate\Plugin\migrate\destination\EntityContentBase::updateEntity()

Updates an entity with the new values from row.

This method should be implemented in extending classes.

Parameters

\Drupal\Core\Entity\EntityInterface $entity: The entity to update.

\Drupal\migrate\Row $row: The row object to update from.

Return value

\Drupal\Core\Entity\EntityInterface An updated entity from row values.

Overrides Entity::updateEntity

3 calls to EntityContentBase::updateEntity()
Book::updateEntity in core/modules/book/src/Plugin/migrate/destination/Book.php
EntityContentComplete::updateEntity in core/modules/migrate/src/Plugin/migrate/destination/EntityContentComplete.php
EntityRevision::getEntity in core/modules/migrate/src/Plugin/migrate/destination/EntityRevision.php
Gets the entity.
3 methods override EntityContentBase::updateEntity()
Book::updateEntity in core/modules/book/src/Plugin/migrate/destination/Book.php
EntityContentComplete::updateEntity in core/modules/migrate/src/Plugin/migrate/destination/EntityContentComplete.php
EntityRevision::updateEntity in core/modules/migrate/tests/src/Unit/destination/EntityRevisionTest.php
Don't test method from base class.

File

core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php, line 271

Class

EntityContentBase
Provides destination class for all content entities lacking a specific class.

Namespace

Drupal\migrate\Plugin\migrate\destination

Code

protected function updateEntity(EntityInterface $entity, Row $row) {
  $empty_destinations = $row->getEmptyDestinationProperties();
  // By default, an update will be preserved.
  $rollback_action = MigrateIdMapInterface::ROLLBACK_PRESERVE;
  // Make sure we have the right translation.
  if ($this->isTranslationDestination()) {
    $property = $this->storage
      ->getEntityType()
      ->getKey('langcode');
    if ($row->hasDestinationProperty($property)) {
      $language = $row->getDestinationProperty($property);
      if (!$entity->hasTranslation($language)) {
        $entity->addTranslation($language);
        // We're adding a translation, so delete it on rollback.
        $rollback_action = MigrateIdMapInterface::ROLLBACK_DELETE;
      }
      $entity = $entity->getTranslation($language);
    }
  }
  // If the migration has specified a list of properties to be overwritten,
  // clone the row with an empty set of destination values, and re-add only
  // the specified properties.
  if (isset($this->configuration['overwrite_properties'])) {
    $empty_destinations = array_intersect($empty_destinations, $this->configuration['overwrite_properties']);
    $clone = $row->cloneWithoutDestination();
    foreach ($this->configuration['overwrite_properties'] as $property) {
      $clone->setDestinationProperty($property, $row->getDestinationProperty($property));
    }
    $row = $clone;
  }
  foreach ($row->getDestination() as $field_name => $values) {
    $field = $entity->{$field_name};
    if ($field instanceof TypedDataInterface) {
      $field->setValue($values);
    }
  }
  foreach ($empty_destinations as $field_name) {
    $entity->{$field_name} = NULL;
  }
  $this->setRollbackAction($row->getIdMap(), $rollback_action);
  // We might have a different (translated) entity, so return it.
  return $entity;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.