You are here

public static function FieldStorageConfig::preDelete in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/field/src/Entity/FieldStorageConfig.php \Drupal\field\Entity\FieldStorageConfig::preDelete()

Acts on entities before they are deleted and before hooks are invoked.

Used before the entities are deleted and before invoking the delete hook.

Parameters

\Drupal\Core\Entity\EntityStorageInterface $storage: The entity storage object.

\Drupal\Core\Entity\EntityInterface[] $entities: An array of entities.

Overrides ConfigEntityBase::preDelete

File

core/modules/field/src/Entity/FieldStorageConfig.php, line 408

Class

FieldStorageConfig
Defines the Field storage configuration entity.

Namespace

Drupal\field\Entity

Code

public static function preDelete(EntityStorageInterface $storage, array $field_storages) {

  /** @var \Drupal\Core\Field\DeletedFieldsRepositoryInterface $deleted_fields_repository */
  $deleted_fields_repository = \Drupal::service('entity_field.deleted_fields_repository');

  // Set the static flag so that we don't delete field storages whilst
  // deleting fields.
  static::$inDeletion = TRUE;

  // Delete or fix any configuration that is dependent, for example, fields.
  parent::preDelete($storage, $field_storages);

  // Keep the field storage definitions in the deleted fields repository so we
  // can use them later during field_purge_batch().

  /** @var \Drupal\field\FieldStorageConfigInterface $field_storage */
  foreach ($field_storages as $field_storage) {

    // Only mark a field for purging if there is data. Otherwise, just remove
    // it.
    $target_entity_storage = \Drupal::entityTypeManager()
      ->getStorage($field_storage
      ->getTargetEntityTypeId());
    if (!$field_storage->deleted && $target_entity_storage instanceof FieldableEntityStorageInterface && $target_entity_storage
      ->countFieldData($field_storage, TRUE)) {
      $storage_definition = clone $field_storage;
      $storage_definition->deleted = TRUE;
      $deleted_fields_repository
        ->addFieldStorageDefinition($storage_definition);
    }
  }
}