In 8.5.x the RevisionableInterface::wasDefaultRevision() method and a corresponding (revision metadata) field were added to revisionable entity types to track whether a revision was the default one when it was created. This is historical information and does not change over time:
$revision1 = MyEntityType::create(['type' => 'test']);
$revision1->save();
$revision2 = clone $revision1;
$revision2->setNewRevision();
$revision2->isDefaultRevision(FALSE);
$revision2->save();
$revision3 = clone $revision2;
$revision3->setNewRevision();
$revision3->isDefaultRevision(TRUE);
$revision3->save();
$storage = \Drupal::entityTypeManager()->getStorage($revision1->getEntityTypeId());
$revision1 = $storage->loadRevision($revision1->getRevisionId());
$default = $revision1->isDefaultRevision(); // $default is FALSE
$default = $revision1->wasDefaultRevision(); // $default is TRUE
$revision2 = $storage->loadRevision($revision2->getRevisionId());
$default = $revision2->isDefaultRevision(); // $default is FALSE
$default = $revision2->wasDefaultRevision(); // $default is FALSE
$revision3 = $storage->loadRevision($revision3->getRevisionId());
$default = $revision3->isDefaultRevision(); // $default is TRUE
$default = $revision3->wasDefaultRevision(); // $default is TRUE
The corresponding field is added to every revisionable entity type and is defined via a revision_default revision metadata key, in the entity type definition, whose value defaults to revision_default. The field is installed automatically via system_update_8501, unless your entity type already defines a field with that name. In this case provide a different name via the revision metadata key and add an update function to install the new definition:
/**
* Implements hook_entity_type_alter().
*/
function my_module_entity_type_alter(array &$entity_types) {
/** @var EntityTypeInterface $entity_type */
$entity_type = $entity_types['my_entity_type_id'];
$keys = $entity_type->getKeys();
// Actually this can be done directly in the entity type definition itself.
$keys['revision_default'] = 'revision_default_core';
$entity_type->set('entity_keys', $keys);
}
/**
* Add the "revision_default_core" field to the "my_entity_type_id" entity type.
*/
/**
* Add the "revision_default_core" field to the "my_entity_type_id" entity type.
*/
function my_module_update_8501() {
// Clear the cached entity type definitions so we get the new
// 'revision_default' revision metadata key.
$entity_type_manager = \Drupal::entityTypeManager();
$entity_type_manager->clearCachedDefinitions();
$entity_type_id = 'my_entity_type_id';
/** @var \Drupal\Core\Entity\ContentEntityTypeInterface $entity_type */
$entity_type = $entity_type_manager->getDefinition($entity_type_id);
$definition_update_manager = \Drupal::entityDefinitionUpdateManager();
$field_name = $entity_type->getRevisionMetadataKey('revision_default');
if ($definition_update_manager->getFieldStorageDefinition($field_name, $entity_type_id)) {
return;
}
// Make sure the new "revision_default" revision metadata key is available
// also to code using the latest installed definition.
$installed_entity_type = $definition_update_manager->getEntityType($entity_type_id);
$required_revision_metadata_keys = $installed_entity_type->get('requiredRevisionMetadataKeys');
$required_revision_metadata_keys['revision_default'] = $field_name;
$installed_entity_type->set('requiredRevisionMetadataKeys', $required_revision_metadata_keys);
$revision_metadata_keys = $installed_entity_type->get('revision_metadata_keys');
$revision_metadata_keys['revision_default'] = $required_revision_metadata_keys['revision_default'];
$installed_entity_type->set('revision_metadata_keys', $revision_metadata_keys);
$definition_update_manager->updateEntityType($installed_entity_type);
// Install the new field.
$storage_definition = BaseFieldDefinition::create('boolean')
->setLabel(t('Default revision'))
->setDescription(t('A flag indicating whether this was a default revision when it was saved.'))
->setStorageRequired(TRUE)
->setTranslatable(FALSE)
->setRevisionable(TRUE)
// We cannot tell whether existing revisions were default or not when
// they were created, but since we did not support creating non-default
// revisions in any core stable UI so far, we default to TRUE.
->setInitialValue(TRUE);
$definition_update_manager->installFieldStorageDefinition($field_name, $entity_type_id, 'my_module', $storage_definition);
}