class Entity

Same name in this branch
  1. 11.x core/modules/views/src/Plugin/views/argument_validator/Entity.php \Drupal\views\Plugin\views\argument_validator\Entity
  2. 11.x core/modules/views/src/Plugin/views/area/Entity.php \Drupal\views\Plugin\views\area\Entity
  3. 11.x core/tests/Drupal/Tests/Component/Annotation/Doctrine/Ticket/DCOM58Test.php \Drupal\Tests\Component\Annotation\Doctrine\Ticket\Entity
  4. 11.x core/tests/Drupal/Tests/Component/Annotation/Doctrine/Ticket/DCOM58Entity.php \Entity
Same name in other branches
  1. 9 core/modules/views/src/Plugin/views/argument_validator/Entity.php \Drupal\views\Plugin\views\argument_validator\Entity
  2. 9 core/modules/views/src/Plugin/views/area/Entity.php \Drupal\views\Plugin\views\area\Entity
  3. 9 core/modules/migrate/src/Plugin/migrate/destination/Entity.php \Drupal\migrate\Plugin\migrate\destination\Entity
  4. 9 core/tests/Drupal/Tests/Component/Annotation/Doctrine/Ticket/DCOM58Test.php \Drupal\Tests\Component\Annotation\Doctrine\Ticket\Entity
  5. 9 core/tests/Drupal/Tests/Component/Annotation/Doctrine/Ticket/DCOM58Entity.php \Entity
  6. 8.9.x core/modules/views/src/Plugin/views/argument_validator/Entity.php \Drupal\views\Plugin\views\argument_validator\Entity
  7. 8.9.x core/modules/views/src/Plugin/views/area/Entity.php \Drupal\views\Plugin\views\area\Entity
  8. 8.9.x core/modules/migrate/src/Plugin/migrate/destination/Entity.php \Drupal\migrate\Plugin\migrate\destination\Entity
  9. 8.9.x core/tests/Drupal/Tests/Component/Annotation/Doctrine/Ticket/DCOM58Test.php \Drupal\Tests\Component\Annotation\Doctrine\Ticket\Entity
  10. 8.9.x core/tests/Drupal/Tests/Component/Annotation/Doctrine/Ticket/DCOM58Entity.php \Entity
  11. 8.9.x core/lib/Drupal/Core/Entity/Entity.php \Drupal\Core\Entity\Entity
  12. 10 core/modules/views/src/Plugin/views/argument_validator/Entity.php \Drupal\views\Plugin\views\argument_validator\Entity
  13. 10 core/modules/views/src/Plugin/views/area/Entity.php \Drupal\views\Plugin\views\area\Entity
  14. 10 core/modules/migrate/src/Plugin/migrate/destination/Entity.php \Drupal\migrate\Plugin\migrate\destination\Entity
  15. 10 core/tests/Drupal/Tests/Component/Annotation/Doctrine/Ticket/DCOM58Test.php \Drupal\Tests\Component\Annotation\Doctrine\Ticket\Entity
  16. 10 core/tests/Drupal/Tests/Component/Annotation/Doctrine/Ticket/DCOM58Entity.php \Entity

Provides a generic destination to import entities.

Available configuration keys:

  • default_bundle: (optional) The bundle to use for this row if 'bundle' is not defined on the row. Setting this also allows the fields() method to return bundle fields as well as base fields.

Examples:


source:
  plugin: d7_node
process:
  nid: tnid
  vid: vid
  langcode: language
  title: title
  ...
  revision_timestamp: timestamp
destination:
  plugin: entity:node

This will save the processed, migrated row as a node.


source:
  plugin: d7_node
process:
  nid: tnid
  vid: vid
  langcode: language
  title: title
  ...
  revision_timestamp: timestamp
destination:
  plugin: entity:node
  default_bundle: custom

This will save the processed, migrated row as a node of type 'custom'.

Hierarchy

Expanded class hierarchy of Entity

73 string references to 'Entity'
CommentBreadcrumbBuilder::applies in core/modules/comment/src/CommentBreadcrumbBuilder.php
Whether this breadcrumb builder should be used to build the breadcrumb.
CommentBreadcrumbBuilder::build in core/modules/comment/src/CommentBreadcrumbBuilder.php
Builds the breadcrumb.
CommentTokensHooks::tokenInfo in core/modules/comment/src/Hook/CommentTokensHooks.php
Implements hook_token_info().
CommentTokensHooks::tokenInfo in core/modules/comment/src/Hook/CommentTokensHooks.php
Implements hook_token_info().
CommentTokensHooks::tokens in core/modules/comment/src/Hook/CommentTokensHooks.php
Implements hook_tokens().

... See full list

File

core/modules/migrate/src/Plugin/migrate/destination/Entity.php, line 64

Namespace

Drupal\migrate\Plugin\migrate\destination
View source
abstract class Entity extends DestinationBase implements ContainerFactoryPluginInterface, DependentPluginInterface {
    use DependencyTrait;
    use EntityFieldDefinitionTrait;
    
    /**
     * The entity storage.
     *
     * @var \Drupal\Core\Entity\EntityStorageInterface
     */
    protected $storage;
    
    /**
     * The entity field manager.
     */
    protected EntityFieldManagerInterface $entityFieldManager;
    
    /**
     * The list of the bundles of this entity type.
     *
     * @var array
     */
    protected $bundles;
    
    /**
     * Construct a new entity.
     *
     * @param array $configuration
     *   A configuration array containing information about the plugin instance.
     * @param string $plugin_id
     *   The plugin ID for the plugin instance.
     * @param mixed $plugin_definition
     *   The plugin implementation definition.
     * @param \Drupal\migrate\Plugin\MigrationInterface $migration
     *   The migration.
     * @param \Drupal\Core\Entity\EntityStorageInterface $storage
     *   The storage for this entity type.
     * @param array $bundles
     *   The list of bundles this entity type has.
     */
    public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles) {
        $plugin_definition += [
            'label' => $storage->getEntityType()
                ->getPluralLabel(),
        ];
        parent::__construct($configuration, $plugin_id, $plugin_definition, $migration);
        $this->storage = $storage;
        $this->bundles = $bundles;
        $this->supportsRollback = TRUE;
    }
    
    /**
     * {@inheritdoc}
     */
    public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, ?MigrationInterface $migration = NULL) {
        $entity_type_id = static::getEntityTypeId($plugin_id);
        return new static($configuration, $plugin_id, $plugin_definition, $migration, $container->get('entity_type.manager')
            ->getStorage($entity_type_id), array_keys($container->get('entity_type.bundle.info')
            ->getBundleInfo($entity_type_id)));
    }
    
    /**
     * Gets the bundle for the row taking into account the default.
     *
     * @param \Drupal\migrate\Row $row
     *   The current row we're importing.
     *
     * @return string
     *   The bundle for this row.
     */
    public function getBundle(Row $row) {
        $default_bundle = $this->configuration['default_bundle'] ?? '';
        $bundle_key = $this->getKey('bundle');
        return $row->getDestinationProperty($bundle_key) ?: $default_bundle;
    }
    
    /**
     * {@inheritdoc}
     */
    public function fields() {
        return [];
    }
    
    /**
     * Creates or loads an entity.
     *
     * @param \Drupal\migrate\Row $row
     *   The row object.
     * @param array $old_destination_id_values
     *   The old destination IDs.
     *
     * @return \Drupal\Core\Entity\EntityInterface
     *   The entity we are importing into.
     */
    protected function getEntity(Row $row, array $old_destination_id_values) {
        $entity_id = reset($old_destination_id_values) ?: $this->getEntityId($row);
        if (!empty($entity_id) && ($entity = $this->storage
            ->load($entity_id))) {
            // Allow updateEntity() to change the entity.
            $entity = $this->updateEntity($entity, $row) ?: $entity;
        }
        else {
            // Attempt to ensure we always have a bundle.
            if ($bundle = $this->getBundle($row)) {
                $row->setDestinationProperty($this->getKey('bundle'), $bundle);
            }
            // Stubs might need some required fields filled in.
            if ($row->isStub()) {
                $this->processStubRow($row);
            }
            $entity = $this->storage
                ->create($row->getDestination());
            $entity->enforceIsNew();
        }
        return $entity;
    }
    
    /**
     * Updates an entity with the new values from row.
     *
     * This method should be implemented in extending classes.
     *
     * @param \Drupal\Core\Entity\EntityInterface $entity
     *   The entity to update.
     * @param \Drupal\migrate\Row $row
     *   The row object to update from.
     *
     * @return \Drupal\Core\Entity\EntityInterface
     *   An updated entity from row values.
     *
     * @throws \LogicException
     *   Thrown for config entities, if the destination is for translations and
     *   either the "property" or "translation" property does not exist.
     */
    protected abstract function updateEntity(EntityInterface $entity, Row $row);
    
    /**
     * Populates as much of the stub row as possible.
     *
     * This method can be implemented in extending classes when needed.
     *
     * @param \Drupal\migrate\Row $row
     *   The row of data.
     */
    protected function processStubRow(Row $row) {
    }
    
    /**
     * Gets the entity ID of the row.
     *
     * @param \Drupal\migrate\Row $row
     *   The row of data.
     *
     * @return string
     *   The entity ID for the row that we are importing.
     */
    protected function getEntityId(Row $row) {
        return $row->getDestinationProperty($this->getKey('id'));
    }
    
    /**
     * Returns a specific entity key.
     *
     * @param string $key
     *   The name of the entity key to return.
     *
     * @return string|bool
     *   The entity key, or FALSE if it does not exist.
     *
     * @see \Drupal\Core\Entity\EntityTypeInterface::getKeys()
     */
    protected function getKey($key) {
        return $this->storage
            ->getEntityType()
            ->getKey($key);
    }
    
    /**
     * {@inheritdoc}
     */
    public function rollback(array $destination_identifier) {
        // Delete the specified entity from Drupal if it exists.
        $entity = $this->storage
            ->load(reset($destination_identifier));
        if ($entity) {
            if ($entity instanceof ContentEntityInterface) {
                $entity->setSyncing(TRUE);
            }
            $entity->delete();
        }
    }
    
    /**
     * {@inheritdoc}
     */
    public function calculateDependencies() {
        $this->addDependency('module', $this->storage
            ->getEntityType()
            ->getProvider());
        return $this->dependencies;
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
DependencyTrait::$dependencies protected property The object's dependencies.
DependencyTrait::addDependencies protected function Adds multiple dependencies.
DependencyTrait::addDependency protected function Adds a dependency.
DestinationBase::$migration protected property The migration.
DestinationBase::$rollbackAction protected property The rollback action to be saved for the last imported item.
DestinationBase::$supportsRollback protected property Indicates whether the destination can be rolled back.
DestinationBase::checkRequirements public function Checks if requirements for this plugin are OK. Overrides RequirementsInterface::checkRequirements
DestinationBase::getDestinationModule public function Gets the destination module handling the destination data. Overrides MigrateDestinationInterface::getDestinationModule 1
DestinationBase::rollbackAction public function The rollback action for the last imported item. Overrides MigrateDestinationInterface::rollbackAction
DestinationBase::setRollbackAction protected function For a destination item being updated, set the appropriate rollback action.
DestinationBase::supportsRollback public function Whether the destination can be rolled back or not. Overrides MigrateDestinationInterface::supportsRollback
Entity::$bundles protected property The list of the bundles of this entity type.
Entity::$entityFieldManager protected property The entity field manager.
Entity::$storage protected property The entity storage.
Entity::calculateDependencies public function Calculates dependencies for the configured plugin. Overrides DependentPluginInterface::calculateDependencies
Entity::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create 2
Entity::fields public function Returns an array of destination fields. Overrides MigrateDestinationInterface::fields 1
Entity::getBundle public function Gets the bundle for the row taking into account the default.
Entity::getEntity protected function Creates or loads an entity. 7
Entity::getEntityId protected function Gets the entity ID of the row. 2
Entity::getKey protected function Returns a specific entity key.
Entity::processStubRow protected function Populates as much of the stub row as possible. 1
Entity::rollback public function Delete the specified destination object from the target Drupal. Overrides DestinationBase::rollback 2
Entity::updateEntity abstract protected function Updates an entity with the new values from row. 2
Entity::__construct public function Construct a new entity. Overrides DestinationBase::__construct 2
EntityFieldDefinitionTrait::getDefinitionFromEntity protected function Gets the field definition from a specific entity base field.
EntityFieldDefinitionTrait::getEntityTypeId protected static function Finds the entity type from configuration or plugin ID. 3
MigrateDestinationInterface::getIds public function Gets the destination IDs. 11
MigrateDestinationInterface::import public function Import the row. 11
PluginInspectionInterface::getPluginDefinition public function Gets the definition of the plugin implementation. 7
PluginInspectionInterface::getPluginId public function Gets the plugin ID of the plugin instance. 3

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